【发布时间】:2018-08-18 15:17:36
【问题描述】:
为什么这段代码会打印"greater than 0"?
int main()
{
unsigned int a = 5;
int b = -10;
(a + b) > 0 ? printf("greater than 0") : printf("less than 0");
}
如果我这样做:
printf("%d\n", a + b);
...它打印:
-5
【问题讨论】:
-
整数提升规则。
-
printf("%d\n", a + b);实际上有未定义的行为。a + b的结果是unsigned int类型,但"%d"需要int类型的参数。如果值在 but 类型的范围内是可以的,但这里不是这样。