我不确定while循环如何在以下简单代码中工作
short CountBits(unsigned int x){
short num_bits = 0;
while (x){
num_bits += x & 1;
x >>= 1;
}
return num_bits;
}
无符号整数如何计算为True或False?
答案 0 :(得分:5)
在给定的上下文中,x
必须转换为true
或false
。
来自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"? 任何数值评估为true
或false
的方式相同:0为false
,其他任何值均为true
。有些人会把测试写成while (x != 0)
;这完全是一回事。
答案 3 :(得分:1)
对于C ++中的任何整数,在大多数机器上,0将评估为false。因此,当X变为0时,循环将终止。循环将继续,而x是非零值。