|
看到这样一个题目,感觉充分的体现了位运算的便捷
题目来源:剑指Offer
题目表述:写这样一个函数:对于输入给定的一个整数,要求输出该整数二进制码中1的个数
错误解法:当输入为负数时,会导致死循环
int NumberOf1(int n)
{
int count = 0;
while(count)
{
if(n & 1)
count ++;
n = n >> 1;
}
return count;
}
正确解法:循环次数:整数所占长度
int NumberOf1(int n)
{
int count = 0;
int temp = 1;
while(temp)
{
if(temp & n)
count ++;
temp = temp << 1;
}
return count;
}
高效解法:循环次数:整数对应的二进制中1的个数
int NumberOf1(int n)
{
int count = 0;
while(n)
{
count ++;
n = (n-1) & n;
}
return count;
}
|
|