为什么这个乘法中存在整数溢出?

时间:2013-03-26 22:52:19

标签: 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

1 个答案:

答案 0 :(得分:11)

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

(从技术上讲,只要一个文字属于long类型,其他文字将被提升为long

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

请参阅integer literals,其中解释了不同的文字。