题目:请实现一个函数,输入一个整数,输出该二进制表示中1的个数,例如把9表示成二进制是1001,有2位1,因此如果输入9,该函数输出2.
要求:
1、整数,包括边界值1、0x7FFFFFFF
2、负数,包括边界值0x80000000、0xFFFFFFFF
3、0
显然,本体的难点也就是表示负数的情况,因为计算机中是用二进制来表示的,而又是用二进制的补码来表示的,所以当出现负数的情况下,我们不可以将负数右移来达到我们的目的,但是如果是整数的情况下,我们是可以通过右移来完成的。
那么我们应该采取什么做法呢?
我们可以反过来想,既然我们不能移动负数的位数,我们可以用一个数向左移,这样就可以和原来数做比较了。
现在贴出远吗如下:
#include<stdio.h>
int binary_one(int n)
{
int k=0,tag=1;
while(tag)
{
if(n&tag)k++;
tag<<=1;
}
return k;
}
int main()
{
printf("请输入一个整数:\n");
int n;
scanf("%d",&n);
printf("此整数二进制中有 %d 个 1\n",binary_one(n));
return 0;
}
剑指offer:二进制中1的个数,布布扣,bubuko.com
原文:http://blog.csdn.net/litianpenghaha/article/details/22112705