解释以下输出

时间:2017-09-22 09:27:19

标签: c loops infinite-loop

#include <stdio.h>
int main() {
    unsigned char var = -100;
    for(var = 0; var <= 255; var++){
       printf("%d ", var);
    }
}

输出附在下面(在代码块IDE 16.01版上运行)

enter image description here

为什么输出是无限循环?

4 个答案:

答案 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的值