【发布时间】:2017-03-22 18:50:11
【问题描述】:
我有一个执行以下计算的简单 c++ 应用程序
long long calcOne = 3 * 100000000; // 3e8, essentially
long long calcTwo = 3 * 1000000000; // 3e9, essentially
long long calcThree = 3 * 10000000000; // 3e10, essentially
如果我写下每个计算的结果,我会得到以下输出:
calcOne = 300000000
calcTwo = -1294967296
calcThree = 30000000000
那么为什么第二次计算失败了?据我所知,它在 long long 类型的范围内(calcThree 更大......)。
我在 Windows 10 上使用 Visual Studio 2015。提前致谢。
【问题讨论】:
-
整数溢出 - 您正在使用适合
int的整数文字,并且在乘法之后它溢出 - 只有在此之后它才会转换为long long- 您可以明确强制文字为通过附加ll后缀将其视为long long -
我可以确认我在 VS2015、Windows 10、64 位版本上得到了相同的结果。
-
@Rama 同意你的观点,但这有更好的答案。将更改此问题的标题,使其对搜索更有用。
标签: c++ literals integer-overflow long-long