位运算符及其使用

参考文献http://blog.csdn.net/baitxaps/article/details/50160125

位运算符

位运算关系图

最高位是符号位;0表示正数;1表示负数

原码、反码、补码

· 正数的原码、反码、补码相同
123的原码:00000000 00000000 00000000 01111011
123的反码:00000000 00000000 00000000 01111011
123的补码:00000000 00000000 00000000 01111011

· 负数的原码是按照绝对值转换后,最高位补1;反码是除符号位外,所有位取反;补码为反码加1;
-123的原码:10000000 00000000 00000000 01111011
-123的反码:11111111 11111111 11111111 10000100
-123的补码:11111111 11111111 11111111 10000101

平时进行的运算实则是反码之间的运算。

实际使用

① 判断奇偶性
a & 1 == 0 ,a为偶数;a & 1 == 1,a为基数;
②求平均数
(a & b) + ((a ^ b) >> 1)
③x,y交换数据
x ^= y ; y^=x ; x^=y
④求绝对值
(a ^ (a >> 31) - (a >> 31))
⑤判断一个数是否是2的冥
a & (a - 1) == 0
⑥相反数
(~x + 1)
⑦作为标志位
eg:
red = 0001
blue = 0010
yellow = 0100

0111:代表红蓝黄
0101:代表红黄

你可能感兴趣的:(位运算符及其使用)