无符号整数条件的while循环

3

我不确定以下简单代码中的while循环是如何工作的

short CountBits(unsigned int x){
    short num_bits = 0;
    while (x){
        num_bits += x & 1;
        x >>= 1;
    }
    return num_bits;
}

无符号整数如何评估为True或False?
4个回答

5
在给定的上下文中,x必须转换为truefalse
根据C++11标准(4.12/1):

算术、未作用域的枚举、指针或成员指针类型的prvalue可以转换为类型为bool的prvalue。零值、空指针值或空成员指针值被转换为false;任何其他值都被转换为true

请思考
while (x){ ... }

as

while (x != 0){ ... }

2

True表示任何不等于0的整数。因此,如果x的值为0,则循环将退出。


2
“无符号整数如何评估为真或假?”与任何数字值评估为truefalse的方式相同:0是false,任何其他值都是true。有些人会将测试写成while (x != 0);那完全是同一件事。

1
在大多数机器上,C++中的整数,当值为0时会被视为false。因此,当X变为0时,循环将终止。只要x是非零值,循环就会继续进行。

2
告诉我们更多关于那些循环在 x 变为 0 时不终止的机器。 - M.M
1
C++有一个标准,它规定x为0确实会使循环终止。 - M.M

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接