按位与(&
)
- 作用:对运算符两侧以二进制表达的操作符按位分别进行
与
运算,这一运算以数中同样的位(bit
)为单位 - 规则:仅当两个操作数都为1时,输出结果才为1,否则为0
- 举例:12的二进制为1100,5的二进制位0101,则
12 & 5
的二进制数为0100,即12 & 5 = 4
按位或(|
)
- 作用:对运算符两侧以二进制表达的操作符按位分别进行
或
运算,这一运算以数中同样的位(bit
)为单位 - 规则:仅当两个操作数都为0时,输出结果才为0,否则为1
- 举例:12的二进制为1100,5的二进制位0101,则
12 | 5
的二进制数为1101,即12 | 5 = 13
按位异或(^
)
- 作用:对运算符两侧以二进制表达的操作符按位分别进行
异或
运算,这一运算以数中同样的位(bit
)为单位 - 规则:仅当两个操作数不同时,输出结果才为1,否则为0
- 举例:12的二进制为1100,5的二进制位0101,则
12 ^ 5
的二进制数为1001,即12 ^ 5 = 9
按位取反(~
)
- 规则:将各位数字去反:全部的0置为1,1置为0
- 举例:12的二进制为1100,进行去反操作位:
10000000 00000000 00000000 00001101
,即~12 = -13
- 参考:Java中按位取反操作符
~
的工作原理
按位左移(<<
)
- 作用:把一个数的全部位都向左移动若干位
- 举例:12的二进制为1100,则
12 << 1
的二进制位11000,即12 << 1 = 24
按位右移(>>
)
- 作用:把一个数的全部位都向右移动若干位
- 举例:12的二进制为1100,则
12 >> 1
的二进制位0110,即12 >> 1 = 6
无符号右移(>>>
)
- 作用:无符号右移一位,不足的补0
- 举例:12的二进制为1100,则
12 >>> 1
的二进制位0110,即12 >>> 1 = 6
补充
- 位运算符是一种基于二进制的运算,涉及知识包含原码、反码、补码
- 原码:当前数字的二进制表现形式,如-1的原码是1000 0001
- 反码:正数的反码是其本身;负数的反码是二进制保留符号位,剩余位取反,如-1的反码是1111 1110
- 补码:正数的原码、反码、补码都是一样的,负数的补码是在其反码的基础上+1,比如-1的补码是1111 1111