计算机位的操作

位运算组合起来,可以对存储在计算机中的各位进行自由操作。
计算机中处理的各种数据都是以二进制的位来表示的。文本是由字符所对应编码的数字串组成,各数字串最后还是还原成二进制的比特。图像数据是各个点的颜色按一定形式排列,最后也还是二进制的比特串。程序所处理的对象,甚至计算机所执行的程序本身,说到底都是二进制的比特串。
也就是说,操作二进制位就等于操作计算机的数据。

基本的位处理操作有 4 种。
1. 取出特定位的状态。
2. 特定位置位(设为 1)。
3. 特定位清零(设为 0)。
4. 特定位反转。

1 特定位的状态
要从一连串二进制位中取出某一特定位 a 的状态当然,这个功能可以用按位与(&)来实现。按位与的两方之中,只要有一方是 0,结果就必然是 0;一方是 1,另一方的结果就原封不动返回。所以准备一个数 B,只需将想取出的那一位置设为 1,其余位置设为 0,那么取 A 与 B 的按位与,就可以只取出 A 数中 a 位的状态。
A &= (1<<3)

2 特定位置1
仅生成某一特定位为 1 的数,可以用移位运算符。用式 1<<n,就可以得到仅某一特定位为 1 的数。
用按位与,可以不管原数内容,而将其某一位设为1。
A |= (1<<3)

3 特定位置0
首先,用按位取反做一个特定位清零所需要的掩码。计算与些掩码的按位与就能实现清零操作。
A &= ~(1<<3)

4 特定位取反
位清零,也就是将某一特定位设为 0,比设为 1 要麻烦些。要用到掩码、按位与及按位取反的组合。要将第 2 位清零的话,就是下面这个样子。
A ^=(1<<3)