按位运算符都是对二进制进行计算
1.按位与运算符 &(类似逻辑运算符&&):只有对应的两个二进位均为1时,结果才为1,否则为0.
比如11&25 = 9
01011 : 11
11001 : 25
01001 :9
2.按位或运算符 | (类似逻辑运算符||):只要对应的两个二进位有一个为1时,结果位就为1,否则为0.
比如11 | 25 = 27
01011 : 11
11001 : 25
11011 : 27
3.按位异或 ^:当对应的二进位相异(不相同)时,结果为1,否则为0.
比如11 ^25 = 18
01011 : 11
11001 : 25
10010 : 18
规律:相同数值相 ^ 的结果是0,比如6 ^ 6 = 0.
任何数值跟0进行 ^ ,结果还是原来的数值.9 ^ 0=9
多个整数相^的结果跟顺序无关,比如5 ^ 6 ^ 7 = 5 ^ 7 ^ 6.
因此得出结论:a ^ b ^ a = b ,a ^ a=0在0 ^ b = b.
4.按位取反 ~:对整数的各二进位进行取反,0变1,1变0
比如9,~9取反为-10
八个字节
0000 0000 0000 0000 0000 0000 0000 1001
取反
1111 1111 1111 1111 1111 1111 1111 0110
求负数:再取反+1
1000 0000 0000 0000 0000 0000 0000 1001 +1 等于 1000 0000 0000 0000 0000 0000 0000 1010(-10)
5.按位左移运算符 <<:把整数a的各二进位全部左移n位,离位抛弃,低位补0.左移n位其实就是乘以2的n次方。由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出去的结果值可能会改变正负性。a*2的n次方
比如9 << 1
0000 0000 0000 0000 0000 0000 0000 1001 :9
八个字节向左挪1位,高位抛弃低位补0
000 0000 0000 0000 0000 0000 0000 10010 :18
6.按位右移运算符 >>:把整数a的各二进位全部右移n位。保持符号位不变。右移n位其实就是除以2的n次方
为正数时,符号位为0,最高位补0.
为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。
比如 9 >> 1
0000 0000 0000 0000 0000 0000 0000 1001 :9
八个字节向左挪1位,高位抛弃低位补0
00000 0000 0000 0000 0000 0000 0000 100 :4