分享

计算无符号数中二进制1的个数 - C/C++ - 庸愚居

 jijo 2009-09-01
 












位翻转
或许编程的朋友都曾经遇到过比特位的翻转,这儿有一段小程序或许能参考一下:)
其实思想很简单,先对各个比特位进行两两交换,然后二二交换,然后四四交换,然后八八交换,最后前后对换。
 
unsigned int
reverse(register unsigned int x)
{
        register unsigned int y = 0x55555555;
        x = (((x >> 1) & y) | ((x & y) << 1));
        y = 0x33333333;
        x = (((x >> 2) & y) | ((x & y) << 2));
        y = 0x0f0f0f0f;
        x = (((x >> 4) & y) | ((x & y) << 4));
        y = 0x00ff00ff;
        x = (((x >> 8) & y) | ((x & y) << 8));
        return((x >> 16) | (x << 16));
}

发表于: 2006-11-16,修改于: 2006-11-24 16:51,已浏览365次,有评论0条 推荐 投诉
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多