本来想采用最原始的方法来计算,先模2,再除2 ,但是很大位的数字在eclipse中不能运行,说是integer 类型超出界限。
如数字: 2147483648 (10000000000000000000000000000000)
public static int hammingWeight(int n) {
int count = 0;
while (n > 0) {
int Rem = n % 2;
int Div = n / 2;
if (Rem == 1)
count++;
n = Div;
}
return count;
}
快速的方法应该是利用求与运算,都为1的时候为1 ,其他情况为0.
另外,题目中说的是无符号类型,Unsigned int 类型是不包含负数的,不用考虑负数。
有关 符号数的链接如下: 点击打开链接
一个十进制数字进行二进制的求解方式如下:点击打开链接