运算符
单目运算
<<:左移
>>:右移,原数为正,高位补0,原数为负,高位补1
>>>:无状态右移,不管原数正负,全都补0
&:逻辑与,在二进制情况下,同1则1,有0则0,注意在布尔运算时也可用
|:逻辑或,在二进制情况下,有1则1,同0则0,注意在布尔运算时也可用
~:取反,1变0,变1
^:异或,位相同位0,不同为1
复合运算
&=:a&=b相当于a = a & b
|=:a |= b相当于a = a | b
>>=:a >>= b相当于a = a >> b
<<=:a <<= b相当于a = a << b
^=:a ^= b 相当于a = a ^ b
位运算常用便捷查询
1 << 30:快速获取1G
1 << 26:快速获取64M
n >> 1:快速获取n的一半
(n - 1) >>> 1:n-1无状态右移1位,快速获取二叉树/二叉堆的父节点
n << 1 +1:在二叉树/堆中找n的左孩子,+2找右孩子
位运算的经典应用
java源码中很多使用位运算做状态变化的,非常好用,案例如下:
ReentrantReadWriteLock中的Sync的共享排他锁逻辑
线程池中的核心属性:ctl
hashmap中的容量
评论区