剑指 Offer 15. 二进制中1的个数
题目描述 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。
示例 1:
输入:n = 11 (控制台输入 00000000000000000000000000001011) 输出:3 解释:输入的二进制串
00000000000000000000000000001011 中,共有三位为 ‘1’。
int hammingWeight(uint32_t n) {
int count = 0;
while(n>0)
{
if(n%2 == 1) //有1就计数
count++;
n >>= 1; //向右移位
}
return count;
}
解题思路
我们直接使用位运算或者除以2的方式解决
设想只有当一个十进制数为奇数时,它的二进制最低位为1,为偶数时则为0,我们可以利用这一点直接统计一个无符号数中的1的个数
假设 n = 13
13 二进制为 1 1 0 1 为奇数 count++ 向右移位(除以二)
6 二进制为 0 1 1 0 为偶数 count不加 向右移位(除以二)
3 二进制为 0 0 1 1 为奇数 count++ 向右移位(除以二)
1 二进制为 0 0 0 1 为奇数 count++ 向右移位(除以二)
0 二进制为 0 0 0 0 循环结束
最后计数器count = 3 即13的二进制中1的个数为3个