算法题 位1的个数

题目:

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

 

示例 1:

输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

示例 2:

输入:00000000000000000000000010000000
输出:1
解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。

示例 3:

输入:11111111111111111111111111111101
输出:31
解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-1-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

这道题中可以采用&1的操作来判断末尾的一位是否为1,1的二进制形式为0000 0000 0000 0000 0000 0000 0000 0001,按位&的规则是二者均为1则结果为1,否则结果为0。由于1的二进制的前31位都为0,所以与它做&运算的数的前31位不论为多少,结果的前31位都为0。最后一位由于1的二进制最后一位为1,那么与它做&运算的数为1,则结果的最后一位也为1,否则为0。

简而言之,最终结果的前31位数已经确定为0,最后一位数为1还是为0由和1做&运算的那个数决定。

由于有32位所以循环32次来进行32次判断,每判断一次后,将判断过的位右移一位丢弃掉。

代码:

 

public class Solution {
    public int hammingWeight(int n) {
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if ((n & 1) == 1)
                count++;
            n >>= 1;
        }
        return count;
    }
}

 

posted @ 2020-07-18 10:38  无心大魔王  阅读(180)  评论(0编辑  收藏  举报