java中位运算符有“与( & )”、“或( | )”、“异或( ^ )”、“取反( ~ )”、“左移( << )”、“右移( >> )”、“无符号右移( >>> )”,主要是针对二进制来进行逻辑计算的
与( & )
使用规则:有 0 则 0
示例: 3 & 4 = 0
0011 // 3 的二进制
0100 // 4 的二进制
-------------
0000
4 & -1 = 4
0000 0100 // 4的二进制码
1111 1111 // -1 的二进制补码
0000 0100 // 逻辑运算结果
0000 0100 // 计算结果
或( | )
使用规则:有 1 则 1
示例: 3 | 4 = 7
0011 // 3 的二进制
0100 // 4 的二进制
-------------
0111
3 | -4 = -1
0000 0011 // 3 的二进制码
1111 1100 // -4 的二进制补码
1111 1111 // 逻辑运算结果
1000 0001 // 计算结果 取反+1
异或( ^ )
使用规则:相同为 0, 不同为 1
示例:3 ^ 4 = 7
0011
0100
----------
0111
3 ^ -5 = -8
0000 0011 // 3 的二进制码
1111 1011 // -5 的二进制补码
1111 1000 // 逻辑运算结果
1000 1000 // 计算结果 -1
取反( ~ )
使用规则:遇 0 则 1,遇 1 则 0
示例: ~ 8 = -9
8 转变成二进制补码
0000 0000 0000 0000 0000 0000 0000 1000
取反(~发挥作用)
1111 1111 1111 1111 1111 1111 1111 0111
上一步得到的二进制数-1
1111 1111 1111 1111 1111 1111 1111 0110
然后取反,得到目标值(这个目标值是指~正数这个负数)的绝对值的补码
0000 0000 0000 0000 0000 0000 0000 1001
上一步的补码转化为十进制正数,然后家伙加上负号,就得到了目标值
-9
~ -9 = 8
-9 首先将负数的绝对值9转化为二进制补码的形式
0000 0000 0000 0000 0000 0000 0000 1001
将上一步得到的二进制取反再+1,得到负数(-9)的二进制补码
1111 1111 1111 1111 1111 1111 1111 0110
1111 1111 1111 1111 1111 1111 1111 0111
取反(~发挥作用)
0000 0000 0000 0000 0000 0000 0000 1000
上一步得到的二进制序列转化为十进制就是目标值。
8
左移( << )
使用规则:位运算符“<<”就是将操作数所有二进制位向左移动一位,相等于乘以2(运算时,左边的空位根据原数的符号位补0或者1(原来是负数就补1,是正数就补0))
示例:
2 << 1 = 4
-2 << 1 = -4
右移( >> )
使用规则:位运算符“>>”就是将操作数所有二进制位向右移动一位,相等于除以2(运算时,左边的空位根据原数的符号位补0或者1(原来是负数就补1,是正数就补0))
示例:
8 >> 1 = 4
-8 >> 1 = -4
无符号右移( >>>)
无符号右移“>>>”就是将操作数所有二进制位向右移动一位。运算时,左边的空位补0(不考虑原数正负)。
示例:
8 >>> 1 = 4
-8 >>> 1 = 2147483644