【发布时间】:2017-05-01 01:44:00
【问题描述】:
我不确定 while 循环在以下简单代码中是如何工作的
short CountBits(unsigned int x){
short num_bits = 0;
while (x){
num_bits += x & 1;
x >>= 1;
}
return num_bits;
}
无符号整数如何计算为真或假?
【问题讨论】:
标签: c++
我不确定 while 循环在以下简单代码中是如何工作的
short CountBits(unsigned int x){
short num_bits = 0;
while (x){
num_bits += x & 1;
x >>= 1;
}
return num_bits;
}
无符号整数如何计算为真或假?
【问题讨论】:
标签: c++
在给定的上下文中,x 必须转换为 true 或 false。
来自 C++11 标准 (4.12/1):
算术、无作用域枚举、指针或指向成员类型的指针的纯右值可以转换为
bool类型的纯右值。零值、空指针值或空成员指针值转换为false;任何其他值都将转换为true。
想想
while (x){ ... }
作为
while (x != 0){ ... }
【讨论】:
True 是任何不等于 0 的整数。因此,如果 x 计算结果为 0,则循环中断。
【讨论】:
“无符号整数如何计算为真或假”?与 any 数值计算为 true 或 false 的方式相同:0 是 false,任何其他值都是 true。有些人会把测试写成while (x != 0);完全一样。
【讨论】:
对于 C++ 中的任何整数,在大多数机器上,0 将评估为假。因此,当 X 变为 0 时,循环将终止。当 x 为非零值时,循环将继续。
【讨论】:
x变为0时循环不会终止的机器