码迷,mamicode.com
首页 > 其他好文 > 详细

编程之美1——一个数的二进制表示中1的个数

时间:2015-06-01 09:42:13      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:编程之美

这里要介绍3种解法

第一种;(常规解法)

数在计算机内部都是用二进制表示的,所以可连续用数n除2

代码1:


<span style="font-size:14px;">#include <iostream>
using namespace std;
int main(void)
{
    int n,m;
    m=0;
    cin>>n;
    while(n)
    {
        if(n%2)    //如果n不能整除2,说明当前n的末尾数为1
            m++;
        n>>=1;    //n右移1位,即n/2
    }
    cout<< m <<endl;
    return 0;
}</span>


第二种:使用位操作

&:若a为1,且b为1,则a&b为1,否则,a&b为0

这里初始化i=0x1;

n&i若为1,则n的末尾为1,否则为0

代码2:



<span style="font-size:14px;">#include <iostream>
using namespace std;
int main(void)
{
   //    使用位操作,1 和 二进制的最后一位进行 与(&) 运算
    int n,i,m;
    m=0;
    i=0x1;
    cin>>n;
    while(n)
    {
        m+=(n&i);
        n>>=1;
    }
    cout << m <<endl;
    return 0;
}</span>


第三种:使用另一种位操作

若n的二进制表示为0010 0000,则第二种算法明显有待改进

可让n与n-1进行 & 运算,若n&(n-1)==0,则为上述情况(n的二进制表示中,只有一位是 0)。


代码3:


<span style="font-size:14px;">#include <iostream>
using namespace std;
int main(void)
{  
    int n,m;
    m=0;
    cin>>n;
    while(n)
    {
        n&=(n-1);
        m++;
    }
    cout << m <<endl;
 
    return 0;
}</span>


编程之美1——一个数的二进制表示中1的个数

标签:编程之美

原文地址:http://blog.csdn.net/u011694809/article/details/46122895

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!