左移( « )
5 « 2
首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位):
0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0:
0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20
右移( » )
5 » 2
还是先将5转为2进制表示形式:
0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:
0000 0000 0000 0000 0000 0000 0000 0001
无符号右移( »> )
-5 »> 3
-5换算成二进制 : 1111 1111 1111 1111 1111 1111 1111 1011
-5无符号右移3位后的结果 536870911 换算成二进制 (用0进行补位) : 0001 1111 1111 1111 1111 1111 1111 1111
位与( & )
5 & 3 = 1
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0001
位或( | )
5 | 3 = 7
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
7转换为二进制:0000 0000 0000 0000 0000 0000 0000 0111
位异或( ^ )
5 ^ 3 = 6
5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
6 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110
异或运算:两个值只要有一位发生改变,结果就会改变。
异或运算有下面三个特性
- 任何数和 0 做异或运算,结果仍然是原来的数,即 a ^ 0 = a 。
- 任何数和其自身做异或运算,结果是 0,即 a ^ a = 0。
- 异或运算满足交换律和结合律,即 a ^ b ^ a=b ^ a ^ a=b ^ (a ^ a)=b ^ 0 = b 。
位非( ~ )
~5 = -6
5 转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
-6 转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010