题目:请实现一个函数,输入一个整数,输出该二进制表示中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;
- }