本题来自LCR 133. 位 1 的个数 - 力扣(LeetCode)
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数。
示例 1:
输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串
00000000000000000000000000001011 中,共有三位为 '1'。
示例 2:
输入:n = 128 (控制台输入 00000000000000000000000010000000) 输出:1 解释:输入的二进制串 00000000000000000000000010000000 中,共有一位为 '1'。
示例 3:
输入:n = 4294967293 (控制台输入 11111111111111111111111111111101,部分语言中 n = -3) 输出:31 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
关于本题,我的思路是:
利用按位与&,让输入的n值每一位都与1比较,利用一个while循环就可以解决了
循环的条件是n是否为0,因为当n为0时,一个1也没有了
判断一次就让n右移一次,右移的过程顺便判断那一位是否为1
所谓了二进制有二进制的解法,一物降一物
上代码:
int hammingWeight(uint32_t n) {
int i=0;
while(n)
{
if((n&1)==1)
{
i++;
}
n=n>>1;
}
return i;
}