【发布时间】:2016-02-26 16:33:03
【问题描述】:
给定这个操作:
int64_t a_int64, b_int64 = WHATEVER1;
int32_t c_int32 = WHATEVER2;
a_int64 = b_int64 - (c_int32 * 1000000);
c_int32 是否在乘法前提升为 int64_t?我知道所有整数在任何算术运算之前都被提升到至少“int”大小,如果二元运算符的等级高于 int,则提升到更大操作数的大小。但是括号内的运算是否与(第二个)运算,即减法分开处理?
【问题讨论】:
-
确定 - 只需使用
1000000ULL表示乘法的两个参数都应提升为至少 64 位 -
注意:
()是括号。括号是[]。 -
@Lashane:正确的是使用
INT64_C宏。而OP使用有符号整数,后缀U是错误的。 -
@Ian:如果溢出,这是未定义的行为。您不能测试未定义的行为。
-
@Lashane
__STDC_CONSTANT_MACROS是在哪里定义的?我不熟悉这个宏。
标签: c integer-arithmetic