请实现一个函数,输入一个整数,输出该数的二进制表示中1的个数。
例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2.
普通解法:
int number_of_1(int n)
{
int count = 0;
unsigned int flag = 1;
while (flag){
if (n & flag)
++count;
flag = flag << 1;
}
return count;
}
该解法,如果是32位的整数则需要循环32次。
下面这种解法则是由多少个一,就只须多少次。
惊喜解法:
利用的原理是这样的:
把一个整数减去1