题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
考点:位运算
-------------可能陷入死循环的解法---------------------
从n的2进制形式的最右边开始判断是不是1,该解法如果输入时负数会陷入死循环,因为负数右移时,在最高位补得是1,本题最终目的是求1的个数,那么会有无数个1了。
---------------正解--------------------------------
思想:用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数
private static int NumberOf1_low(int n)
{
int count = 0;
unsigned int flag = 1;
while (flag)
{
if (n & flag)
count++;
flag = flag << 1;
}
return count;
}
循环的次数等于二进制的位数,32位需要循环32次,