【发布时间】:2020-10-16 22:15:20
【问题描述】:
int tx = INT_MAX +1; // 2147483648;
printf("tx = %d\n", tx);
打印tx = -2147483648。
我想知道如何根据 C11 标准中的 6.3 转换来解释结果?
-
在评估
INT_MAX +1时,两个操作数都是int吗?结果是2147483648long int吗? 6.3中的哪条规则决定了结果的类型? -
在评估
tx = ...时,是否截断右侧位表示的较高位,使其大小从long int大小变为int大小,然后将截断结果解释为int? 6.3中的哪些规则决定了这一步的转换是如何进行的?
【问题讨论】:
-
C11 6.5p5: "如果在计算表达式的过程中出现异常情况(即,如果结果没有在数学上定义或不在其类型的可表示值范围内) , 行为未定义"
标签: c type-conversion integer c11