请实现一个函数,输入一个整数,输出该属二进制表示中1的个数。例:9的二进制为1001,输出2. 方法一:
把这个数转化为二进制,用该数最小位和1做&运算判断最小位是否为1,每判断一次,将该数往右移一位,或将1网左移一位。代码如下:
int One (int n)
{
int count=0;
for(int i=0;i<32;i++)//int类型有32位
{
if(n&1)
{
count++;
}
n=n>>1;//或1=1<<1;
}
return n;
} 方法二: 把这个数转化为二进制,将该数与该数减1做&运算,使用一个计数器count,记录做了count次,count为所求结果。
原理:设一个二进制数n最右边的1位于第m位,当n-1后,m和m位之后的所有数都会变为0,m位之前的所有数都会保持不变,所以这个整数有几个1,这样的操作就会做几次。
举个例子:9的二进制为1001,9-1=8二进制为1000,1001&1000=1000,1000-1=0111,1000&0111=0。这样的操作做了两次,所以9有2个1.代码如下:
int Two(int n)
{
int count=0;
while(n)
{
count++;
n=n&(n-1);
}
return count;
} 

京公网安备 11010502036488号