c ++最大数字类型


c++ maximum of number types

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
size of int, long, etc
Is `long` guaranteed to be at least 32 bits?

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

1
2
3
4
5
6
7
8
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;
}

哪些印刷品:

1
2
3
2147483647
2147483647
9223372036854775807

问题1:为什么intlong是一样的?

问题2:以上输出来自64位的VS2010。我的C++程序运行为64位吗?


question 1: why int and long are same?

由于各种原因(便利性),机器体系结构支持的整数大小往往是2的幂。大多数现代处理器可以在本地使用8、16、32和64位整数。但是,有五种常用的整数类型:charshortintlonglong long。所以其中两个必须有相同的尺寸。

  • 在大多数16位平台上,intshort都是16位的。

  • 在大多数32位平台上,intlong都是32位的。

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

question 2: above output is from VS2010 on 64bit. Is my c++ program running as 64bit?

无法从这些数据中分辨出来。Windows是一个平台,其中longint对于32位和64位程序具有相同的大小。


它们的输出相同,因为在Visual Studio中,intlong都是有符号的32位整数。不管您是构建64位还是32位二进制文件(Windows64位遵循LLP64模型),这都是正确的。

因为在Visual Studio上,intlong的大小在32位和64位之间没有变化,所以无法从提供的数据中分辨出所构建的数据。


根据C++标准,LING至少需要和int一样大。这意味着LUN也可以与int相同大小,这意味着MIN和Max对于相同类型(签名或无符号)的长和int可以是相等的。

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

下面是一些更有趣的阅读:long是否保证至少32位?

就问题2而言,您需要检查项目设置,看看您是否正在构建一个win32或x64可执行文件。


给定类型的最大值取决于编译器。C++标准没有规定任何长的必须是特定位数的比特等。

但是,声明是:

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

如果您要使用一个特定大小的整数,我建议包括"inttypes.h"和使用int t、int16_t、int32_t、int64_t等…