C语言位运算

参考资料:

http://baike.baidu.com/view/379209.htm

http://wenku.baidu.com/view/a3c70f641ed9ad51f01df2f1.html

(1)     &     按位与   如果两个相应的二进制位都为1,则该位为1,否则为0

应用:二进制取位。

例如:a & 1 可以用来判断a的奇偶,结果为1则是奇数,为0则是偶数。

(2)    |      按位或   两个相应的二进制位中只要有一个为1,则该位为1,否则为0

应用:对二进制位上的特定位进行无条件赋值。

例如:a | b 就是把二进制最末位强制改为1,如果需要改为零,则 a | b - 1 即可。其实际意义是把这个数强行变为最接近的偶数。

(3)   ^     按位异或   两个相应的二进制位值相同为0,不同为1

应用:1,对二进制位的特定一位进行取反操作,因为异或可以这样定义:0和1异或0都不变,异或1则取反。

         2,异或运算的逆运算是它本身,即:(a^b)^b = a;  可以用于简单加密。

         3,用于交换两个变量的值。a=a^b; b=b^a; a=a^b;

(4)   ~   按位取反   指定位1变0,0变1

应用:求整数的二进制反码。

        如果~a,a为无符号整数,则得到的值是它与该类型上界的差。

(5)   <<   左移    用来将一个数的各二进制位左移N位,右边补零,高位溢出舍去

应用:a << b   等效于  a乘以2的b次方

(6)   >>   右移    将一个数各二进制位右移N位,低位舍弃,无符号整数高位补零,有符号整数高位情况视系统而定

应用: a >> b   等效于  a除以2的b次方

原文地址:https://www.cnblogs.com/GBRgbr/p/2612849.html