我不确定在以下简单的代码
中,while循环如何工作short CountBits(unsigned int x){
short num_bits = 0;
while (x){
num_bits += x & 1;
x >>= 1;
}
return num_bits;
}
未签名的整数如何评估为true或false?
在给定上下文中,必须将x
转换为true
或false
。
来自C 11标准(4.12/1(:
可以将算术,未枚举,指针或指向成员类型的指针转换为
bool
类型的贵族。零值,空指针值或NULL成员指针值将转换为false
;任何其他值都将转换为true
。
想到
while (x){ ... }
AS
while (x != 0){ ... }
true是任何不等于0的整数
"一个未签名的整数如何评估为true或false"?以相同的方式任何数字值评估对true
或false
:0是false
,任何其他值是true
。有些人会将测试写为while (x != 0)
;那是完全一样的。
对于C 中的任何积分号,在大多数机器上,0将评估为false。因此,当x变为0时,循环将终止。当x是非零值时,循环将继续。