NOIP2018 普及组:统计二进制中1的个数 - 代码填空题
为了统计一个非负整数的二进制形式中 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 的个数。
原文地址: https://www.cveoy.top/t/topic/qB2i 著作权归作者所有。请勿转载和采集!