0 题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
1 分析
一个数除2,余数为1,那么表示二进制中含有一个1。
因此可以使用循环,依次判断。
但是除法效率底,这里又是除2,因此可以使用位运算实现除2
2实现
int NumberOf1(int n)
{
unsigned int flag = 1;
int counts = 0;
while (flag)
{
if (flag & n)//替换判断最后一位是否为1
{
++counts;
}
flag = flag << 1;
}
return counts;
}