3 & 4
&:同为1结果为1,否则为0
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000 -> 0
4 | 8
|: 一方为1结果便为1,否则为0
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 1000
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 1100 -> 12
~9
~:取反,0变成1,1变成0 ->要得到最后结果必须再计算补码(反码+1)
0000 0000 0000 0000 0000 0000 0000 1001
---------------------------------------
1111 1111 1111 1111 1111 1111 1111 0110 ->得到反码,下面回算补码(即减1取反)
---------------------------------------
1111 1111 1111 1111 1111 1111 1111 0101 ->-1
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 1010 ->取反结果为10,取反码的时候以1开头,即为负数,所以结果为-10
下面是-10在java中的表示:
0000 0000 0000 0000 0000 0000 0000 1010
1111 1111 1111 1111 1111 1111 1111 0101 +1
1111 1111 1111 1111 1111 1111 1111 0110
8 ^ 23
^:异或, 不同为1,相同为0
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0001 0111
---------------------------------------
0000 0000 0000 0000 0000 0000 0001 1111 -> 31
4 << 3
<<:左位移,4的二进制向左移动3位,右边补0
0000 0000 0000 0000 0000 0000 0000 0100
---------------------------------------
0000 0000 0000 0000 0000 0000 0010 0000 -> 32
5 >> 9
>>:右位移, 5的二进制向右移动9位,左边补0
0000 0000 0000 0000 0000 0000 0000 0101
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000 -> 0