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