为什么这段代码会导致无限循环

时间:2013-11-06 09:53:49

标签: c

unsigned int i = 1<<10;

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

任何人都可以解释一下这个代码导致无限循环的原因吗?提前感谢您的回复。

3 个答案:

答案 0 :(得分:6)

无符号整数 - 它始终被解释为&gt; = 0

答案 1 :(得分:4)

无符号整数总是正数。当i == 0并且您从中减去1时,结果将回绕到最大unsigned intUINT_MAX,因为您的数据类型无法处理负值。

答案 2 :(得分:0)

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

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

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

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