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

计算十进制数转化成二进制时1的个数

时间:2014-05-17 14:54:19      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   java   

bubuko.com,布布扣
#include <iostream>

using namespace std;

int func(int x)
{
    int cnt = 0;
    while (x)
    {
        cnt++;
        x = x&(x - 1);
    }
    return cnt;
}

int main()
{
    cout << func(9999) << endl << func(8);
    cin.get();
    return 0;
}
bubuko.com,布布扣

输出8,1

其实上面那个函数输出结果是:形参x转化为二进制后包含1的个数。

这样考虑:从右向左看,每次while循环,执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,直至x值为0。

如:8的二进制位1000,8-1二进制为0111,它们&的结果直接为0了。

如:二进制101000,减一是100111,它们&结果是100000,然后对100000循环一次就是0,退出了,共累加了2次。

 ------------------------------------------------------------------------------------------------------------------------------------------------------

总结:

1:由十进制看到二进制并用这样的方法计算其中1的个数真帅!

2:对于负数,C/C++中,非零数表示真(true),零表示假(false),其实也就0的二进制全部是0,所以也会进入循环,并且也是计算其二进制中1的个数。比如func(-1)返回的是32.下面的程序输出4,32.

  我的机器int是4字节,32位,-1在机器中表示为1111...........111(共32个),(不确定是不是补码表示法...)

  

计算十进制数转化成二进制时1的个数,布布扣,bubuko.com

计算十进制数转化成二进制时1的个数

标签:style   blog   class   code   c   java   

原文地址:http://www.cnblogs.com/jiayith/p/3730981.html

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