【发布时间】:2015-10-18 05:04:07
【问题描述】:
我有一个非常基本的问题,但我不确定我是否理解这个概念。假设我们有:
int a = 1000000;
int b = 1000000;
long long c = a * b;
当我运行它时,c 显示负值,所以我也将 a 和 b 更改为 long long,然后一切都很好。那么,当a 和b 的值在int 的范围内并且它们的产品分配给c(即long long)时,为什么我必须更改它们?
我正在使用 C/C++
【问题讨论】:
-
整数在乘法之前很久没有提升,它们仍然是整数和乘积。然后将产品浇铸到长长,但为时已晚,溢流已经袭来。拥有 a 或 b long long 中的一个应该也可以,因为另一个会被提升。
-
您应该标记您正在使用的编程语言,因为不同的语言可能会引入不同的行为;)
-
根据您使用的 C 的机器和版本,'int' 的大小也可能会发生变化。
-
long long c = ((long long)a*(long long)b);
-
这是我之前的问题之一的重复stackoverflow.com/questions/29579112/…
标签: c++ int range long-integer