32bit int*32bit int = 64 bit int?

Mic*_*ael 6 c++ integer-overflow

换句话说,这是否按预期工作?

int32 i = INT_MAX-1;
int64 j = i * i;
Run Code Online (Sandbox Code Playgroud)

或者我需要先将i转换为64位?

Wil*_*ean 17

您需要将至少一个操作数强制转换为乘法.在乘法完成时,系统不知道您计划分配给int64.

(除非int64实际上是您的特定系统的本机int类型,这似乎不太可能)

  • 常见技巧是首先乘以1L而不是铸造:int64 j = 1L*i*i; 如果您的long长度为64位,则此方法有效. (4认同)
  • 如果你的'long`只有32位,你可以在大多数现代编译器上使用1LL. (3认同)

CB *_*ley 7

这取决于int32和int64是什么.

简而言之,在任何算术运算之前,所有整数都被提升为至少'int'大小(可能是64位),如果它的排名大于int,则为二进制运算符的较大操作数的大小.

如何使用表达式的结果(无论它是否存储到更宽的类型)与表达式的组成部分的促销无关.