全文来源:http://www.cnblogs.com/mz121star/archive/2008/05/24/bit.html
不准备全文拷贝了,浪费资源啊
摘录一部分:
1. 使用按位与运算符
按位与运算符一般用于选择整数值中特定的一个位或一组位。为了说明这句话的含义,下面再次使用本节开头的例子,利用一个16位整数存储字体的特性。
假定声明并初始化一个变量,指定一种12磅字号、斜体、样式为6的字体。实际上,就是图3-1中的字体。样式的二进制值是00000110,斜体位是1,黑体位是0,字号是01100。还有一个没有使用的位,需要把font变量的值初始化为二进制数0000 0110 0100 1100。
由于4位二进制数对应于一个16进制数,因此最简单的方法是以十六进制方式指定初 始值:
unsigned short font=0x064C; // Style 6, italic, 12 point
注释:
在建立像这样的位模式时,十六进制表示法要比十进制表示法更合适。
要使用字号,需要从font变量中提取它,这可以使用按位与运算符来实现。只有当两个位都是1时,按位与运算符才会产生1,所以可以定义一个值,在将定义字号的位和font执行按位与操作时选择该位。为此,只需定义一个值,该值在我们感兴趣的位上包含1,在其他位上包含0。这种值称为掩码,用下面的语句定义它:
unsigned short size_mask=0x1F; //Mask is 0000 0000 0001 1111
//to select size
font变量的5个低位表示其字号,把这些位设置为1,剩余的位设置为0,这样它们就会被舍弃(二进制数0000 0000 0001 1111可转换为十六进制数1F)。
现在可以用下面的语句提取font中的字号了:
unsigned short size=font & size_mask;
在&操作中,当两个对应的位是1时,结果位就是1。任何其他组合起来的结果就是0。因此组合起来的值如下:
font 0000 0110 0100 1100
size_mask 0000 0000 0001 1111
font & size_mask 0000 0000 0000 1100
把二进制值分解为4位一组的形式并不是很重要,这只是易于表示对应的十六进制数,看出其中有多少位。掩码的作用是把最右边的5位分隔出来,这5位表示点数(即字号)。
可以使用同样的方法选择字体的样式,只是还需要使用按位移动运算符把样式值向右移动。可以用下面的语句定义一个掩码,选择左边的8位,如下所示:
unsigned short style_mask=0xFF00; //Mask is 1111 1111 0000 0000
//for style
用下面的语句获取样式值:
unsigned short style=(font & style_mask) >> 8; //Extract the style
该语句的结果如下:
font 0000 0110 0100 1100
style_mask 1111 1111 0000 0000
font & style_mask 0000 0110 0000 0000
(font & style_mask) >> 8 0000 0000 0000 0110
为表示斜体和黑体的位定义掩码,并把相应的位设置为1,就很容易把它们分隔出来。当然,还需要一种方式来测试得到的位,这部分内容详见第4章。
按位与运算符的另一个用途是关闭位。前面介绍的是掩码中为0的位在结果中也将输出0。例如,为了关闭表示斜体的位,其他的位不变,只需定义一个掩码,使该掩码中的斜体位为0,其他位为1,再对font变量和该掩码进行按位与操作即可。实现此操作的代码将在按位或运算符一节中介绍。