我是靠谱客的博主 碧蓝大侠,最近开发中收集的这篇文章主要介绍计算一个二进制数的1的位数bitcount,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 一种比较好理解的方法是:

int bitcount(d unsigned x)
{
    int b;
    for (b = 0; x != 0; x >>= 1)
        if (x & 01)
            b++;
   return b;
}

该方法每次清除x的一位,并判断该位是否为1,若是,则b加1,否则不加,直到x变成0。

2.另一种效率比较高的算法是:

int bitcount(d unsigned x)
{
    int b;
    for (b = 0; x! = 0; x &= (x-1))
        b++;
    return b;
} 

有这样一个规则:在采用二进制补码的系统中,x &= (x-1) 能将x中最右边为1的比特位去掉(即置为0)

原因简单说一下:(设X最右边为1的为第N位(从左往右数))

    x是偶数,则x的N-1位为0,而x-1的N-1位则为1,N位则为0,则x的N位、N-1位与(x-1)的N位、N-1位相与,则成功消去x中最右边为1的比特位去掉。

    x是奇数,则x的N位为1,而x-1的N位则为0,别的位都相同。则x的N位与(x-1)的N位相与,则成功消去x中最右边为1的比特位去掉。



最后

以上就是碧蓝大侠为你收集整理的计算一个二进制数的1的位数bitcount的全部内容,希望文章能够帮你解决计算一个二进制数的1的位数bitcount所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部