c++ - 为什么这个乘法会出现整数溢出?

标签 c++

<分区>

我对这段代码感到困惑:

#include <climits>
#include <iostream>
int main(void) {
    using namespace std;
    cout << "long max " << LONG_MAX << endl;
    long x = 2 * 1024 * 1024 * 1024;
    cout << "2 * 1024 * 1024 * 1024 = " << x << endl;
    return 0;
}

我本以为应该是 2147483648,但我得到了。使用 unsigned 似乎没有帮助。什么给了?

long max 9223372036854775807
2 * 1024 * 1024 * 1024 = -2147483648

最佳答案

添加一些 L*。 长 x = 2L * 1024L * 1024L * 1024L;

(从技术上讲,只要一个字面量是 long 类型,其他字面量就会被提升为 long)

发生溢出是因为 2 等默认是 int 类型,并且溢出发生在 赋值之前。

参见 integer literals这解释了不同的文字。

关于c++ - 为什么这个乘法会出现整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15648906/

相关文章:

c++ - C++ 代码的符号表是否包含函数名和类名?

c++ - 将类似生活游戏的程序分区以进行负载平衡的并行计算

c++ - PropertySheet 在 Win32 中的应用与使用

C++按升序打印文件名

c++ - 这个类有什么问题?

c++ - Algorithm文件解决方案中的错误c2784、c2780和c2676?

c++ - 功能模板的默认参数不起作用

c++ - 在 Windows GUI 应用程序中使用 `main()` 而不是 `WinMain()` 时究竟会产生什么不良后果?

c++ - C++ 的最小条件日志记录

c++ - 如何根据先前的行为预测系统的行为