2

可能的重复:
int、long 等的大小
`long` 是否保证至少为 32 位?

我想找出我的计算机的每种数据类型的最大值。代码是:

int main() {
    using namespace std;
    cout << numeric_limits<int>::max() << endl;
    cout << numeric_limits<long>::max() << endl;
    cout << numeric_limits<long long>::max() << endl;

    return 0;
}

打印:

2147483647
2147483647
9223372036854775807

问题1:为什么intlong一样?

问题2:以上输出来自64位的VS2010。我的 c++ 程序是否以 64 位运行?

4

4 回答 4

6

问题1:为什么int和long是一样的?

由于各种原因(方便),机器架构支持的整数大小往往是 2 的幂。大多数现代处理器本机可以处理 8、16、32 和 64 位整数。但是,有五种常用的整数类型:charshortintlonglong long。所以它们中的两个必须具有相同的大小。

  • 在大多数 16 位平台上,int并且short都是 16 位。

  • 在大多数 32 位平台上,int并且long都是 32 位的。

  • 在大多数 64 位平台上,long并且long long都是 64 位的。有一个例外...

问题2:以上输出来自64位的VS2010。我的 c++ 程序是否以 64 位运行?

从这些数据中无法判断。Windows 是一个平台,其中32 位longint64 位程序具有相同的大小。

于 2012-12-16T21:45:30.560 回答
2

它们的输出相同,因为在 Visual Studio 中,两者int都是long有符号的 32 位整数。无论您是构建 64 位还是 32 位二进制文​​件,这都是正确的(Windows 64 位遵循LLP64 模型

由于 Visual Studio 上 32 位和 64 位之间的大小intlong没有变化,因此无法从您提供的数据中判断您正在构建哪个

于 2012-12-16T21:44:06.330 回答
0

The maximum value of a given type is compiler dependant. The C++ standard does not state anything about a long having to be a specific number of bits etc.

However what is does state is that:

1 = sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)

If you are looking to use a specific sized integer, I would suggest including "inttypes.h" and using the int_8t, int16_t, int32_t, int64_t, etc...

于 2012-12-16T21:49:10.567 回答
0

根据 C++ 标准,long 至少需要与 int 一样大。这意味着 long 也可以与 int 具有相同的大小,这意味着 long 和 int 相同类型(有符号或无符号)的最小值和最大值可以相等。

更多信息(不仅仅是关于 long 和 int,还有其他类型):https ://stackoverflow.com/a/271132/13760

这里有一些更有趣的读物:`long` 是否保证至少为 32 位?

就问题 2 而言,您需要检查您的项目设置,看看您是在构建 Win32 还是 x64 可执行文件。

于 2012-12-16T22:33:47.920 回答