位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。
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



