目 录CONTENT

文章目录

位运算

FatFish1
2025-06-06 / 0 评论 / 0 点赞 / 3 阅读 / 0 字 / 正在检测是否收录...

运算符

单目运算

  • <<:左移

  • >>:右移,原数为正,高位补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的共享排他锁逻辑

http://www.chymfatfish.cn/archives/reentrantreadwritelock#%E5%86%85%E9%83%A8%E7%B1%BBsync
  • 线程池中的核心属性:ctl

http://www.chymfatfish.cn/archives/threadpool#%E4%BB%8Ectl%E5%88%B0capacity
  • hashmap中的容量

0

评论区