带有if的按位运算符

 范大少微博劳 发布于 2023-02-13 15:46

我正在阅读C语言的K&R书籍,在2.10节他们给出了以下例子:

/*bitcount: count 1 bits in x*/
int bitcount(unsigned x)
{
    int b; 
    for(b=0; x!=0;x>>=1)
       if(x&01)
           b++;
     return b;

}

该函数应该计算x中的1位.

我明白if应该"掩盖"这些位,但我不明白怎么做?

这种情况是基本的:

if(x&01==1)?

我不明白这种情况.

(x&01)是什么意思?

另外,我不明白循环什么时候停止?每当所有位都向右移动并且所有空出的单元现在都是0时?

我只是无法理解这种方法是如何工作的,我找了一个解决方案很长一段时间.

谢谢.

1 个回答
  • 让我们使用while循环重写函数.

    int bitcount(unsigned x)
    {
        int b = 0;
        while (x != 0) {
            if (x & 0x1)
                b++;
            x = x >> 1;
        }
    
        return b;
    }
    

    注意循环的每次迭代,我们做两件事:

      如果数字的最低位是高位(数字是奇数),那么我们将一位加到我们的位计数器上.

      每次迭代,我们将数字除以2 (x = x >> 1).

    2023-02-13 15:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有