作者:mobiledu2502878025 | 来源:互联网 | 2023-01-26 18:27
为什么以下c代码最终会进入无限循环?
for(unsigned char i = 0; i <= 0xff; i++){}
与以下结果相同:
for(unsigned char i = 0; i <= 0xff; ++i){}
我必须以哪种方式修改代码,以使其按预期工作(不使用int
或unsigned int
数据类型)?
1> Weather Vane..:
如果你真的需要使用unsigned char
那么你可以使用
unsigned char i = 0;
do {
// ...
} while(++i);
当对unsigned
整数的算术运算突破其限制时,行为定义良好.因此,此解决方案将处理256个值(对于8位unsigned char
).
好吧,我被诅咒,另一种罕见的使用while while循环.
2> dbush..:
范围unsigned char
是0到255(0xff).添加1到0xff会产生0x100,当分配回到回unsigned char
绕到0时.
所以比较i <= 0xff
永远是对的.因此无限循环.
如果要在0xff之后停止循环,请将其int
用作数据类型.这是至少-32767到32767的范围,通常更多.