6

我对这个代码片段感到困惑:

#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应该是这样,但我得到了。使用无符号似乎没有帮助。是什么赋予了?

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

1 回答 1

10

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

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

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

请参阅解释不同文字的整数文字。

于 2013-03-26T22:53:29.980 回答