编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。
分析:首先注意到是无符号数,那么int型数最大为32位,我们可以按位与运算,可以求出1的个数
要是用java写的话,java中是没有无符号数,所有的数都是有符号的的所以用java的话输入的数会超出java的32位,可用java的toBinaryString方法把数转成二进制字符串一位的比较。具体实现如下:
C++:
class Solution {
public:
int hammingWeight(uint32_t n) {
int ans=0;
while(n>0)
{
n=n&(n-1);
ans++;
}
return ans;

}

};
java:
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int ans=0;
String s=Integer.toBinaryString(n);
for(char i:s.toCharArray())
{
if(i==’1’)
ans++;
}
return ans;
}
}