C语言技巧:统计一个二进制数的位数为1的个数

时间:2011-10-03 00:57:53  来源:快乐IT  作者:学无止境

一个无符号数,写一个函数将其2进制的位数为1的个数返回出来。

#include<stdio.h>
int main()
{
    int x=0xF1A0;
    int i=0;
    while(x)
    {
        x &= x-1;
        ++i;
    }
    printf("count=%d\n", i);
    return 0;
}

其实,最关键的部分就是“x &= x -1;

说明:不管二进制是什么,减1就会从右到左把0变为1,直至碰见1,把1变为0才结束.

如果x=x&(x-1), 就是把从左到右连续的0都变为1,并且遇到的第一个1变为0!

举例:10010100000  减1  就是:10010011111  ,再“&”就等于 10010000000  (红色部分)

这样循环一次,就是把最右边的1变为零。

有多少个1,就循环多少次。直到最后x的值变为0。

相关文章

文章评论

共有  0  位网友发表了评论 此处只显示部分留言 点击查看完整评论页面