(1)按位与 &
示例:7&3=3
两个数二进制的对应位数想比较,如果同1则为1
一0则为0.
111
011
----
011---- 3
(2)按位或 |
示例: 8|2=10
一1则为1,同0才为0
1000-----8
0010------2
------
1010----- 10
(3)按位异或 ^
7^4=7
对应位置不同则为1,相同则为0
111-----7
101-----4
-----
010------- 2
101
------
111------- 7
注意:两次异或同一个数 会返回原来的数 可通过此特性进行加密
(4)按位取反 ~
~5=-6
首先要明确,取反是二进制操作
在Java中,有符号整数都是用补码来表示
正数时,反码=原码 = 补码
负数时,反码为原码取反 (符号位除外),补码为反码+1
下面以5(Integer)为例:
二进制原码:0000 0000 0000 0000 0000 0000 0000 0101
按位取反操作后的原码:1111 1111 1111 1111 1111 1111 1111 1010
符号位为1 是一个负数
1.先求反码:1000 0000 0000 0000 0000 0000 0000 0101
2.再求补码:1000 0000 0000 0000 0000 0000 0000 0110
最高位代表符号位 1 表示负数,0 表示正数 所以结果是-6