1、与运算 & 同为1时为1其余为0
2、或运算 | 同为0时为0其余为1
3、非运算 ~ 一元运算 对二进制取反
4、异或运算 ^ 相同取0,不同取1
5、>> 右移 负数高位补1,正数补0 >>> 无符号右移 高位补0
6、<< 左移
注意:没有无符号左移,移位的大小要在JVM的位数内,short、char会先转换为int,为什么为图中结果呢?
16的二进制
00000000000000000000000000010000
负数的二进制(补码,正数每位取反 + 1)
11111111111111111111111111110000
右移一位高位补0
0111111111111111111111111111000
后面三位全部为1(+7)再加1就变成了(7 + 1 = 8)
10000000000000000000000000000000
显然结果为2的31次方 - 8即为下图中结果