1、&
二进制与
2 & 3
0B10 & 0B11 => 0B10 => 2
2、|
二进制或
2 | 3
0B10 & 0B11 => 0B11 => 3
3、~
二进制非
~3
= ~ 0B00000000 00000000 00000000 00000011
= 0B11111111 11111111 11111111 11111100
取反之后变成了负数是补码表示 需要求其原码:补码的补码等于原码
=> 0B10000000 00000000 00000000 00000011 反码
=> 0B10000000 00000000 00000000 00000100 反码+1取补码
= -4
4、^
二进制异或
2 ^ 3
0B10 ^ 0B11 => 0B01 => 1
5、 二进制有符号右移
12 >> 2
0B1100 >> 2 => 0B0011 => 3
-12 >> 2
= 0B10000000 00000000 00000000 00001100 原码
=> 0B11111111 11111111 11111111 11110011 反码
=> 0B11111111 11111111 11111111 11110100 补码
>> 2
= 0B11111111 11111111 11111111 11111101 原码
=> 0B10000000 00000000 00000000 00000010 反码
=> 0B10000000 00000000 00000000 00000011 补码
= -3
7、>>>
二进制无符号右移
>>>与>>
唯一的不同是它无论原来的最左边是什么数,统统都用0填充。
12 >>> 2
0B1100 >>> 2 => 0B0011 => 3
-12 >>> 2
= 0B10000000 00000000 00000000 00001100 原码
=> 0B11111111 11111111 11111111 11110011 反码
=> 0B11111111 11111111 11111111 11110100 补码
>>> 2
= 0B0011111111 11111111 11111111 111101
= 1073741821
备注 : 0B
表示二进制
参考
- java中位运算^,&,,总结