找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2081|回复: 0
打印 上一主题 下一主题
收起左侧

二进制数中1的个数

[复制链接]
跳转到指定楼层
楼主
ID:75926 发表于 2015-4-10 16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到这样一个题目,感觉充分的体现了位运算的便捷
题目来源:剑指Offer
题目表述:写这样一个函数:对于输入给定的一个整数,要求输出该整数二进制码中1的个数
错误解法:当输入为负数时,会导致死循环
int NumberOf1(int n)
{
    int count = 0;
    while(count)
    {
        if(n & 1)
            count ++;
        n = n >> 1;
    }
    return count;
}
正确解法:循环次数:整数所占长度
int NumberOf1(int n)
{
    int count = 0;
    int temp = 1;
    while(temp)
    {
        if(temp & n)
            count ++;
        temp = temp << 1;
    }
    return count;
}
高效解法:循环次数:整数对应的二进制中1的个数
int NumberOf1(int n)
{
    int count = 0;
    while(n)
    {
        count ++;
        n = (n-1) & n;
    }
    return count;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表