题目描述
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。
理清思路
运用 & 位运算和移位运算来判断输入整数的每一个二进制位是否为1。但首先需要了解实际系统是32位还是64位。
代码实现
int hammingWeight(uint32_t n) {
int count = 0;
int i = 0;
for(i = 0; i < 32; i++)
{
if(n & (1u<<i))
{
count++;
}
}
return count;
}
记得1后面需要加u表示无符号存储,在C语言中类似的还有:
在此题中为什么要在1后面加u呢?因为在32位系统中,有符号整数二进制的第31位表示符号位,左移的位数不允许超过整数本身的位数,否则会出现以下错误:
看到一篇文章总结左移右移的原理,觉得不错:
https://blog.csdn.net/zj01jx/article/details/119451759