P100:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
判断整数最右边是否为1,让该整数与1做与运算,结果为0则不是,为1则是。
方法1:
public class Solution {
public int NumberOf1(int n)
{ // 输入数右移做与运算,在负数的情况下会导致死循环
// 测试数左移做与运算,则完美避开死循环
int count = 0;
int flag = 1;
while (flag != 0) // 循环次数等于整数二进制的位数
{
if ((n & flag) != 0)
count++;
flag = flag << 1;
}
return count;
}
}
方法2:
public class Solution {
public int NumberOf1(int n)
{
int count = 0;
while (n != 0) // 循环次数为1的个数
{
count++;
n = (n - 1) & n; // 最右边的1变为0
}
return count;
}
}