Integer.bitCount是Java中O(1)时间复杂度的内置方法,用于统计int补码二进制中1的个数,基于位运算优化,比手动循环更高效,适用于判断2的幂、汉明重量计算、位图计数等场景。

Integer.bitCount 是 Java 中一个高效统计整数二进制表示中 1 的个数的内置方法,底层基于位运算优化,时间复杂度为 O(1),无需手动循环或字符串转换。
作用与基本用法
该方法接收一个 int 类型参数,返回其补码二进制形式中值为 1 的比特位个数。例如:
- Integer.bitCount(5) → 5 的二进制是 101,结果为 2
- Integer.bitCount(-1) → -1 在 Java 中是全 1 补码(32 个 1),结果为 32
- Integer.bitCount(0) → 结果为 0
为什么比手动遍历更优
手动统计常写成循环右移并 &1 判断,最坏需 32 次操作;而 bitCount 使用分治位运算(如 Brian Kernighan 算法或 SWAR 技术),仅需固定几次位操作即可完成:
- 避免分支预测失败带来的性能抖动
- 不依赖循环,更适合 JIT 编译器内联优化
- 对负数天然支持(直接按补码处理,无需额外逻辑)
适用典型场景
该方法常见于以下需求中:
- 判断整数是否为 2 的幂:n > 0 && Integer.bitCount(n) == 1
- 计算汉明重量(Hamming weight),用于校验、密码学或相似度计算
- 位图(bitmap)中活跃位计数,如权限掩码、状态标记压缩存储
- 算法题中快速统计 popcount,如「两整数之和」、「汉明距离」等
注意边界与扩展
该方法专用于 int,若需处理 long,可用 Long.bitCount;对 byte/short,需先作无符号扩展再调用(如 Integer.bitCount(b & 0xFF))。不支持浮点数或自定义类型,也不处理字符串形式的二进制(如 "1010" 需先 Integer.parseInt(s, 2))。










