而无符号整数条件的循环



我不确定在以下简单的代码

中,while循环如何工作
short CountBits(unsigned int x){
    short num_bits = 0;
    while (x){
        num_bits += x & 1;
        x >>= 1;
    }
    return num_bits;
}

未签名的整数如何评估为true或false?

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

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

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

想到

while (x){ ... }

AS

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

true是任何不等于0的整数

"一个未签名的整数如何评估为true或false"?以相同的方式任何数字值评估对truefalse:0是false,任何其他值是true。有些人会将测试写为while (x != 0);那是完全一样的。

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

最新更新