问题
#include <stdio.h>
char getChar(int x,int y)
{
char c;
unsigned int a = x;
(a+y>10)?(c=1):(c=2);
return c;
}
int main()
{
char c1 = getChar(7,4);
char c2 = getChar(7,3);
char c3 = getChar(7,-7);
char c4 = getChar(7,-8);
printf("c1=%d\n",c1);
printf("c2=%d\n",c2);
printf("c3=%d\n",c3);
printf("c4=%d\n",c4);
return 0;
}
解答
相加的值为11; c1返回1;
相加的值为10; c2返回2;
-7首先被转换成一个很大的数,加7后正好溢出,其值为0,因此c3返回2;
-8也被转成一个很大的数,加7后为一个很大的数(差1就正好溢出了),因此c4返回1;
总之,我们在看表达式时要很小心地注意符号变量与无符号变量之间的转换、占用不同字节内存的变量之间的赋值等操作,否则可能会出现我们意想不到的结果。