快速求使用二进制表示整数中1的个数

如何快速求一个整数使用二进制表示时1的个数?

这里给出一个很简单的方法,首先看代码:

    public int findBin1Count(int n) {
        int res = 0;
        while (n != 0) {
            if ((n & 1) == 1) res++;
            n >>= 1;
        }

        return res;
    }

其实这就是逐位判断法:

  1. 将整数与1进行按位与操作,如果所得结果为1,那就说明该整数的最低位为1,如果结果为0,那就说明该整数的最低位为0,

  2. 然后将整数无符号右移(逻辑右移)1位,继续和1进行逻辑与运算,直到该整数变为0为止。

这里举个例子,如十进制整数13,使用二进制表示为1101,分别和1进行逻辑与运算并右移:

  1. 1101 & 0001 = 1
  2. 1101 >> 1 = 110
  3. 110 & 001 = 0
  4. 110 >> 1 = 11
  5. 11 & 01 = 1
  6. 11 >> 1 = 1
  7. 1 & 1 = 1
  8. 1 >> 1 = 0(十进制为0结束)

因此最终结果为3

posted @ 2025-02-19 22:23  Cherry_Shen  阅读(24)  评论(0)    收藏  举报