4
unsigned int i = 1<<10;

for(; i>=0; i--) printf(“%d\n”, i);

谁能解释一下这段代码导致无限循环的原因?提前感谢您的任何回复。

4

3 回答 3

6

Unsigned int - 它总是被解释为 >= 0

于 2013-11-06T09:55:06.327 回答
4

无符号整数总是正数。当i == 0你从它递减1时,结果将环绕到最大值unsigned intUINT_MAX因为你的数据类型不能处理负值。

于 2013-11-06T10:02:44.420 回答
1

其他答案已经解释了它导致无限循环的原因。但是,为了实现代码的预期行为,使用 unsigned int 从 1024 倒数到 0,请尝试使用此方法。

unsigned int i = (1<<10)+1;

for(;i-- > 0;) printf(“%d\n”, i);

请注意,循环后 i 的值将是翻转值。

于 2013-11-06T10:27:38.090 回答