c ++最大数字类型

时间:2012-12-16 21:38:35

标签: c++

  

可能重复:
  size of int, long, etc
  Is `long` guaranteed to be at least 32 bits?

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

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 个答案:

答案 0 :(得分:5)

  

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

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

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

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

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

  

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

无法从这些数据中得知。 Windows是longint对于32位和64位程序具有相同大小的平台。

答案 1 :(得分:2)

它们输出相同,因为使用Visual Studio,intlong都是带符号的32位整数。无论您是构建64位还是32位二进制文​​件(Windows 64位都遵循LLP64 model

,都是如此

因为intlong的大小在visual studio上的32位和64位之间没有变化,所以无法分辨出你从数据中获取的数据是什么提供

答案 2 :(得分:0)

给定类型的最大值取决于编译器。 C ++标准没有说明长期必须是特定数量的比特等等。

然而,状态是什么:

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

如果你想使用特定大小的整数,我建议包括“inttypes.h”并使用int_8t,int16_t,int32_t,int64_t等...

答案 3 :(得分:0)

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

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

以下是一些更有趣的阅读:Is `long` guaranteed to be at least 32 bits?

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