参考文献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:代表红黄