C语言 - 隐式类型转换问题
在C语言的表达式运算中,如果参与运算的变量属于不同的数据类型,会出现类型的隐式转换和类型提升。
#include <stdio.h>
#define A 10
#define B -20
int main(void)
{
unsigned int a = 10;
int b = -20;
//表达式1
(a + b > 6) ? printf("a + b > 6\n") : printf("a + b <= 6\n");
//表达式2
(A + B > 6) ? printf("A + B > 6\n") : printf("A + B <= 6\n");
return 0;
}
输出结果:
a + b > 6
A + B <= 6
结果分析
从字面意义上看,无论是 a+b 还是 A+B,结果都是 -10,但是从程序运行结果来看,两者并不一样!
表达式1:
变量a是unsigned int类型,b是int类型,运算结果的类型提升为unsigned int类型,即(unsigned int)(-10) = 4294967286 > 6 为假!
表达式2:
宏定义常量A、B都是int类型,运算结果的类型也是int类型,即-10 <= 6 为真!