一、按位与运算符&
参与运算的两个量按照对应的位进行与运算,且
0&0→0, 0&1→0, 1&0→0, 1&1→1
利用按位与运算,我们可以方便地实现清零或取一个数的某些位。
例如 取出a的低4位,将b的低4位清零。
0x0F&a 取出a的低4位
0xF0&b 将b的低4位清零
这种方法称为“屏蔽方法”,其中0x0F、0xF0称为屏蔽字。
二、按位或运算符|
参与运算的两个量按照对应位进行或运算,且
0|0→0, 0|1→1, 1|0→1, 1|1→1
利用按位或运算,我们可以方便地实现置位或组合新值。
例如 将整数i(2字节)的低字节全置为1。
0xff|i
例如 将整数a的低字节和整数b的高字节组成一个新值。
先取出a的低字节:0xff&a (或0x00ff&a)
再取出b的高字节:0xff00&b
然后组成新值: 0xff&a|0xff00&b
三、按位异或运算符^
参与运算的两个量按照对应的位进行异或运算,且
0^0→0, 0^1→1, 1^0→1, 1^1→0
此外,一个数与0异或仍保持不变,即a^0=a
一个数与自己异或结果为0,即a^a=0
四、按位取反运算符~
这是位运算符中唯一的单目运算符,即将数的每一位取反(0→1,1→0)。
例如 将整数a的最低位清零
0xfffe&a
对于有的大中型计算机,整型占4个字节,如将上式直接挪用过去,则将丢失a的两个高字节,必须改为
0xfffffffe&a
因此程序通用性降低。若改为下面形式则通用:
~1&a
五、左移运算符<<
将一个数的各二进制位全部左移若干位。左移后右边补入0,左边移出的位舍弃。
例如 若a=3,则b=a<<1,b为6
c=b<<1,c为12
即左移一位相当于乘以2。用这种方式实现乘法运算比其它方式快得多,但只适用于左边没有1被移出的情况。例如
a=0x83,则a<<1 结果为6
六、右移运算符>>
将一个数的各二进制位全部右移若干位。右移后,右边移出的位被舍弃,左边补入的位分两种情况:
(1) 对无符号数,左边补入0
(2) 对有符号数,若符号位为0(正数)则补入0;若符号位为1(负数)则补入1。
本篇文章来源于 黑客基地-全球最大的中文黑客站 原文链接:http://www.hackbase.com/tech/2009-02-02/44960.html