我正在尝试将两个整数相加并将其存储在一个
long long int
变量中。但是我得到了意想不到的输出。为什么会这样?
// opeartion result variable
int var1 {2000000000};
int var2 {2000000000};
long long int result {var1 + var2};
std::cout << "Var1: " << var1 << " | size: " << sizeof(var1) << std::endl;
std::cout << "Var2: " << var2 << " | size: " << sizeof(var2) << std::endl;
std::cout << "Result: " << result << " | size: " << sizeof(result) << std::endl;
输出:
Var1: 2000000000 | size: 4
Var2: 2000000000 | size: 4
Result: -294967296 | size: 8
因为
var1
和var2
相加的结果仍然是一个int
,所以你得到的结果溢出然后分配给你的result
变量。你想确保计算已经发生了一些更长的尺寸,即提前投射其中一个(或两个):
long long int result { static_cast<decltype(result)>(var1) + var2 };