为了统计一个非负整数的二进制形式中 1 的个数,代码如下:

int CountBit(int x) 
{
int ret = 0;
while (x) 
{
ret++;
___________;
}
return ret;
}

则空格内要填入的语句是( )。 A. x >>= 1 B. x &= x - 1 C. x |= x >> 1 D. x <<= 1

答案:B. x &= x - 1

解析:

语句 x &= x - 1 的作用是将 x 的二进制表示中最低位的 1 变成 0。

例如,若 x 的二进制表示为 10110,则 x - 1 的二进制表示为 10101,x &= x - 1 的结果为 10100,即把最低位的 1 变成 0。

因此,代码循环执行的过程中,每次都会将 x 的二进制表示中最低位的 1 变成 0,直到 x 为 0,此时 ret 中存储的即为 x 的二进制表示中 1 的个数。

其他选项解析:

  • A. x >>= 1:将 x 右移一位,会丢失最低位的 1,无法正确统计。
  • C. x |= x >> 1:将 x 与 x 右移一位的结果进行或运算,无法实现将最低位的 1 变成 0 的效果。
  • D. x <<= 1:将 x 左移一位,会将最低位变为 0,无法正确统计。

总结:

x &= x - 1 是一个常用的位运算技巧,可以用来统计一个整数的二进制表示中 1 的个数。

NOIP2018 普及组:统计二进制中1的个数 - 代码填空题

原文地址: https://www.cveoy.top/t/topic/qB2i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录