有两个实际的例子是这样的
1、
char a = 0xb6;
short b = 0xb600;
int c = 0xb6000000;
if (a == 0xb6)
printf("a\n");
if (c == 0xb600)
printf("c\n");
if (c == 0xb6000000)
printf("d\n");
最后只打印了d
只打印d是因为字符a和短整形b在参与判断的时候都被强制转换成了32位整形参与运算,是因为他们在内存中都是以32位存储的。
2、
char a = 0xb6;
printf("sizeof(a)=%d.\n",sizeof(a));//1
printf("sizeof(a)=%d.\n", sizeof(+a));//4
printf("sizeof(a)=%d.\n", sizeof(!a));//1
sizeof(+a)的结果为4也是因为 +a参与了运算,所以被转换成了4字节。验证了上述问题。
那么问题来了,字符型和短整形都是什么情况下需要转换成整形进行运算呢?
答案是:表达式中的字符和短整形参与运算前都要转换成整形进行运算。