首页 > 其他 > 详细

剑指offer:二进制中1的个数

时间:2014-03-26 03:50:02      阅读:425      评论:0      收藏:0      [点我收藏+]

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

如图所示,函数binary_one就是通过tag=1作初始数据来左移的。每次左移都要和原始数值做&操作,这样可以得到1的个数。


剑指offer:二进制中1的个数,布布扣,bubuko.com

剑指offer:二进制中1的个数

原文:http://blog.csdn.net/litianpenghaha/article/details/22112705

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!