2.1 求二进制数中1的个数(编程之美P119)
本文只是将《编程之美》中的代码用C语言写出来,并没有实现书中所有的解法。
解法一
int Count(int val)
{
int cnt = 0;
while(val)
{
if(val % 2)
cnt++;
val /= 2;
}
return cnt;
}
解法二
int Count(int val)
{
int cnt = 0;
while(val)
{
cnt += val & 0x1;
val >>= 1;
}
return cnt;
}
解法三
int Count(int val)
{
int cnt = 0;
while(val)
{
val &= val - 1;
cnt++;
}
return cnt;
}
扩展问题:判断整数A和B中的二进制表示中多少位不同
解:只需要(A^B)结果中有多少个1
int diff(int A, int B)
{
int tmp, cnt = 0;
tmp = A^B;
return Count(tmp);
}