while循环使用无符号整数条件

时间:2017-05-01 01:44:00

标签: c++

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

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

无符号整数如何计算为True或False?

4 个答案:

答案 0 :(得分:5)

在给定的上下文中,x必须转换为truefalse

来自C ++ 11标准(4.12 / 1):

  

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue。零值,空指针值或空成员指针值将转换为false;任何其他值都将转换为true

想想

while (x){ ... }

作为

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

答案 1 :(得分:2)

True是任何不等于0的整数。因此,如果x的计算结果为0,那么循环就会中断。

答案 2 :(得分:2)

"无符号整数如何计算为True或False"? 任何数值评估为truefalse的方式相同:0为false,其他任何值均为true。有些人会把测试写成while (x != 0);这完全是一回事。

答案 3 :(得分:1)

对于C ++中的任何整数,在大多数机器上,0将评估为false。因此,当X变为0时,循环将终止。循环将继续,而x是非零值。