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类型,这似乎不太可能)
这取决于int32和int64是什么.
简而言之,在任何算术运算之前,所有整数都被提升为至少'int'大小(可能是64位),如果它的排名大于int,则为二进制运算符的较大操作数的大小.
如何使用表达式的结果(无论它是否存储到更宽的类型)与表达式的组成部分的促销无关.