[英]Why does the output of this program change at 130?
我有以下代码,在我看来它应该总是输入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
这是因为你使用的是带符号的char,可能是一个整数。
当char达到130(它变为130 - 256)时,char会溢出,但整数不会溢出。 130 - 256!= 130。
一个简单的更改修复它,以便结果始终为true - 只需在第一行添加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);
}
使用char关键字时,默认情况下,编译器可能使用signed char。 有符号字符的范围通常为-128到127,而int的范围要大得多。 除了典型的台式PC之外,更多深奥的硬件可能会使用其他值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.