注意:int的类型的位运算应该为32位的二进制参与计算,这里为了方便观察使用4位二进制进行运算。
特别是后面的按位左移和按位右移。
一、关于位运算的计算方式
按位与,两数都为1时才返回1,否则为0
例:5&6
0 1 0 1
& 0 1 1 0
------------------
0 1 0 0
按位或,两数任意为1即返回1,两数都为0才返回0
例:5|6
0 1 0 1
| 0 1 1 0
-------------------------
0 1 1 1
按位异或,两数相同为0,两数不相同为1
例:5^6
0 1 0 1
^ 0 1 1 0
-----------------------------------
0 0 1 1
按位取反,1取反为0,0取反为1
例:~5
0 1 0 1
~
------------------------------
1 0 1 0
按位左移,将二进制向左移动n位,高位丢弃,低位补零
例:5<<1
0 1 0 1
0 1 0 1 0
溢出的一位丢弃,后面不足补零
按位右移,将二进制向右移动n位,高位补1或0(负数补1,正数补0),低位丢弃
例:5 >> 1
0 1 0 1
0 0 1 0 1
溢出的一位丢弃,最高位补零(正数)
-5 >>1
1 1 0 1
1 1 1 0 1
溢出的一位丢弃,最高位补1(负数)