我如何确定此位掩码代码在做什么

问题描述 投票:0回答:1

我是一位编程知识很少的指导者,但是在一些我无法弄清楚的测试中,对一些常见的编程问题需要帮助。问题如下:参见004行;表达式“ value&1”执行以下哪个操作?

    001 unsigned int bitCount (int value) {
    002 unsigned int count = 0;
    003    while (value > 0) {        //until all bits are zero
    004       if ((value & 1) ==1) {  //check lower bit
    005             count++;
    006       }
    007       value >>1;
    008    }
    009    return count;
    010 }
  • 屏蔽除lsb之外的所有位
  • 仅掩盖msb
  • 屏蔽除msb以外的所有位
  • 仅掩盖lsb
bitmask
1个回答
0
投票
在二进制中,数字1为000 .... 00001,换句话说,它在最低有效位中只有一个。因此,当您将其与&(AND)配合使用时,答案中的所有内容都将为零,除了最低有效位的位置(仅当其他输入在该位置为1时才为1)。

而且,在您的程序中,第007行可能没有执行您想要的操作。您似乎将value向右移了一位,但是您没有保存该移位的结果。也许您想编写类似value = value >> 1的东西,以便它实际上修改value变量?

© www.soinside.com 2019 - 2024. All rights reserved.