unsigned int i = 1<<10;
for(; i>=0; i--) printf(“%d\n”, i);
谁能解释一下这段代码导致无限循环的原因?提前感谢您的任何回复。
Unsigned int - 它总是被解释为 >= 0
无符号整数总是正数。当i == 0
你从它递减1
时,结果将环绕到最大值unsigned int
,UINT_MAX
因为你的数据类型不能处理负值。
其他答案已经解释了它导致无限循环的原因。但是,为了实现代码的预期行为,使用 unsigned int 从 1024 倒数到 0,请尝试使用此方法。
unsigned int i = (1<<10)+1;
for(;i-- > 0;) printf(“%d\n”, i);
请注意,循环后 i 的值将是翻转值。