题目
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
代码
#pragma once
/* 负数右移时会用符号位1来填补 */
// 方法1 改用左移
int numberOf1_1(int n)
{
int count = 0;
unsigned int flag = 1; // 需是无符号整数
while (flag) // 左移32次
{
if (n & flag)
++count;
flag = flag << 1;
}
return count;
}
// 方法2 整数与整数-1后相与&,可把最右边的1变为0
int numberOf1_2(int n)
{
int count = 0;
while (n)
{
++count;
n = n & (n - 1);
}
return count;
}