为什么这个程序的输出变化为130?

时间:2010-04-27 14:41:51

标签: c

我有以下代码,在我看来它应该总是输入if语句的真实部分,但是,超过120,它似乎开始执行else子句。为什么会这样?

char x;
for (i=0;i<256;i+=10) {
    x=i;
    if (x==i)
        printf("%d true\n",i);
    else 
        printf("%d false\n",i);
}

输出结果为:

0 true
10 true
: all numbers from 20 to 100 are true
110 true
120 true
130 false
140 false
: all numbers from 150 to 230 are false
240 false
250 false

2 个答案:

答案 0 :(得分:13)

这是因为您使用的是签名字符,可能是整数。

当char达到130(它变为130 - 256)时,它会溢出,但整数不会溢出。 130 - 256!= 130。

一个简单的更改修复它以使结果始终为真 - 只需在第一行添加unsigned

unsigned char x;
for (int i=0;i<256;i+=10)
{
    x=i;
    if (x==i)
        printf("%d true\n",i);
    else 
        printf("%d false\n",i);
}

答案 1 :(得分:12)

当您使用char关键字时,您的编译器可能默认使用signed char。有符号字符的范围通常为-128到127,而int的范围要大得多。除了典型的台式PC之外,更多深奥的硬件可能会使用其他值。