位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。
1、与(&):
&的运算逻辑是 两位相同都为1时结果为1,其他情况结果为0
11 & 14 = 10
11转换为二进制为:0000 0000 0000 1011
14转换为二进制为:0000 0000 0000 1110
结果为:0000 0000 0000 1010 = 10
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
2、非(~):
~是按位取反运算符
取反,是 Java 使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数的为1。
正数的原码、反码、补码相同
负数的反码是原码取反,补码是反码 + 1(符号位不变)
一、正数取反
~5 = -6
5的二进制
原码: 0000 0000 0000 0101
反码: 0000 0000 0000 0101
补码: 0000 0000 0000 0101
~5的二进制
补码: 1111 1111 1111 1010
反码: 1111 1111 1111 1001
原码: 1000 0000 0000 0110 = -6
二、负数取反
~(-5)= 4
-5的二进制
原码:1000 0000 0000 0101
反码:1111 1111 1111 1010
补码:1111 1111 1111 1011
~(-5)的二进制
补码:0000 0000 0000 0100
反码:0000 0000 0000 0100
原码:0000 0000 0000 0100 = 4
一文搞明白位运算符、原码、反码、补码:https://taopanfeng.com/2020/07/02/2020-07-02...14.48.00/
3、或(|)
规则:两位只要有一个位1,结果为1
5 | 3 = 7
5的二进制:0000 0101
3的二进制:0000 0011
结果:0000 0111 = 7
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
4、异或(^)
规则:两位相同为0,不同为1
5 ^ 3 = 6
5的二进制:0000 0101
3的二进制:0000 0011
结果:0000 0110 = 6
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0