#include <stdio.h>
int main() {
unsigned char var = -100;
for(var = 0; var <= 255; var++){
printf("%d ", var);
}
}
输出附在下面(在代码块IDE 16.01版上运行)
为什么输出是无限循环?
答案 0 :(得分:4)
对于var <= 255
,此条件unsigned char
始终为真,假设您的平台上CHAR_BIT
为8。所以循环是无限的,因为增量会导致变量换行(这就是无符号算术在C中的作用)。
这个初始化:
unsigned char var = -100;
不是错误,它只是烦人的代码。编译器将按照语言规范中的规则将int
-100转换为unsigned char
。
答案 1 :(得分:1)
因为 unsigned char overflow 问题。因此,删除for循环条件中的=
。
for(var=0;var<255;var++){
}
有关详细信息,请参阅此stack overflow问题。
答案 2 :(得分:1)
您使用的是unsigned char
,其可能的范围是0-255。
您正在运行0-255(含)的循环。变量变为256的那一刻,它将被转换回0.此外,由于这个可能的范围,初始值-100将被视为+156。
因此,这会导致无限循环。
答案 3 :(得分:1)
unsigned char
范围是0到255.当var = 255时。当它增加时,我们得到256的值,它不能存储在unsigned char中。这就是为什么它以无限循环结束的原因。当你初始化var as - 时100.它不会显示任何错误,因为它将-100转换为二进制并取第8位。相应的值将是var的值