我无法理解这段代码的工作原理:
int length = 1;
int x = 234567545;
while (x /= 10)
length++;
Run Code Online (Sandbox Code Playgroud)
它应该计算int变量中的位数.我不知道while循环是如何工作的.循环是否归零并默认停止?另外,为什么长度从1开始?
Ste*_*ner 55
如果您是C++初学者,有三件事可能会让您怀疑:
第一件事可能是运算符/=,它将整数除法(即没有余数)与赋值相结合.所以x /= 10实际上是一样的x = x / 10.
其次,C++中的每个表达式在经过评估后都有一个值.对于类似的赋值(x = 0),结果是x赋值后的值,即0在这种情况下.
三,如条件if (x) ...与x整体式的福利却在C++中的含义相同if(x != 0),即它false是否x平等0,这是true如果x是别的什么,只是0.
所有在一起:while ( x /= 10 )表示分配x积分除以10的值,然后将值与之比较0.如果0到达,则循环结束.
BTW:length首先1,因为任何数字,甚至0包括至少一个数字.
bro*_*hir 25
x/= 10连续将x除以10,最终使其为0并导致while循环终止,因为0被解释为false(以及0之外的任何其他值为true).
它在length = 1处开始的原因是因为数字中总是至少有1位数:如果x是从0到9(包括0和9),则x/= 10将导致x立即变为0,这意味着循环内部不执行任何操作.因此,如果长度从0开始,它将永远不会增加到1,如果x是单个数字大,那将是错误的.
手动手动计算此示例:
234567545/10 = 23456754,这是真的,所以while循环继续,长度变为2.
23456754/10 = 2345675,是的.长度变为3.
2345675/10 = 234567,是的.长度变为4.
234567/10 = 23456,是的.长度变为5.
23456/10 = 2345,是的.长度变为6.
2345/10 = 234,是的.长度变为7.
234/10 = 23,是的.长度变为8.
23/10 = 2,是的.长度变为9.
2/10 = 0,假.while循环停止,长度等于9.
循环
while (x /= 10) {
length++;
}
Run Code Online (Sandbox Code Playgroud)
会去,直到结果x /= 10的计算结果为false,因为0意味着false它会去,直到x /= 10为0.整数除法截断,确保达到条件.这可以通过添加一个简单的调试语句来说明,即
while (x /= 10) {
length++;
std::cout << length << " " << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
哪个输出
2 23456754
3 2345675
4 234567
5 23456
6 2345
7 234
8 23
9 2
Run Code Online (Sandbox Code Playgroud)
它有助于理解两个部分:
这个:
x /= 10
Run Code Online (Sandbox Code Playgroud)
是相同的:
x = x / 10
Run Code Online (Sandbox Code Playgroud)
该while循环终止,当条件是假的。并且 0 相当于 false。
while (condition) {
length++;
}
Run Code Online (Sandbox Code Playgroud)
所以 x 是,每次通过循环,除以 10,直到 is 为 0。这终止了循环。
因此,条件同时是两件事: