(笔记)Java统计二进制数中1的个数

193 阅读1分钟

1. 直接调用

Integer.bitCount(x) 可以统计x用二进制表示时1的个数

2. 位运算

方法5

public int hammingWeight(int n) {
    int count = 0;
    while (n != 0) {
        n &= n - 1;
        count++;
    }
    return count;
}
  • 原理分析 @小ke
    • 每个二进制的数,都是以0或者1结尾的
    • 对于以1结尾的数n
      • n-1则是以0结尾
      • 并且nn-1只是最后一位不同而已
      • 两者按位与的结果是n-1
      • 例如0111001101,两个数最后一位不同
    • 对于以0结尾的数n
      • n-1则是以1结尾,并且nn-1有多个数位不同
      • n对应的二进制的最右边一个1所在那一位和最后一位之间的多个数位与n-1不同
      • 例如011100001101114个数位不同
    • 所以两种情况下,n & n-1的结果都是将n的最后一个1消掉