题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解答:
一、将这个数进行位操作(有益处风险)
#include<stdio.h>
int Number1(int n)
{
int count=0;
while(n)
{
if(n&1)
count++;
n=n>>1;
}
return count;
}
int main()
{
printf("%d\n",Number1(15));
return 0;
}
二、借助flag,进行位操作(效率不高)
#include<stdio.h>
int Number1(int n)
{
int count=0;
unsigned int flag=1;
while(flag)
{
if(n&flag)
count++;
flag=flag<<1;
}
return count;
}
int main()
{
printf("%d\n",Number1(15));
return 0;
}
三、利用减法
#include<stdio.h>
int Number1(int n)
{
int count=0;
while(n)
{
++count;
n=(n-1)&n;
}
return count;
}
int main()
{
printf("%d\n",Number1(15));
return 0;
}