可能重复:
分配给较大宽度整数时的 C 整数溢出行为
我在谷歌搜索中没有找到明确的答案。假设您有两个表达式:
int16_t a16 = 100;
int16_t b16 = 2000;
int16_t result16 = (a16 * b16) / a16;
int8_t a8 = 100;
int8_t b8 = 20;
int8_t result8 = (a8* b8) / a8;
在评估表达式时(a16 * b16) / a16
,(a8 * b8) / a8
它们是否总是int
在评估期间提升到,然后在赋值之前将最终结果转换回所需的类型(int16_t
或int8_t
),或者这个整数提升完全是可选的?是否总是在评估整数表达式时进行整数提升,还是只是允许?
如果它总是完成,那么我可以预期这两个操作不会溢出(假设int
是 32 位)。如果只允许完成(而不是要求),那么操作可能会溢出。我想更好地了解这种行为。