【问题标题】:c++ maximum of number types [duplicate]c ++最大数字类型[重复]
【发布时间】:2012-12-04 01:12:45
【问题描述】:

可能重复:
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:以上输出来自VS2010 on 64bit。我的 c++ 程序是否以 64 位运行?

【问题讨论】:

  • 我相信除了sizeof(long) &gt;= sizeof(int)sizeof(long long) &gt;= sizeof(long)之外,对位宽没有任何保证。
  • 是的,您的程序可能作为 64 位可执行文件运行,int 传统上仍然是 32 位。
  • 出于向后兼容的目的,Microsoft 选择在 64 位程序中将 long 设置为与 int 相同的大小。我们不知道您的程序是否是 64 位的。对于 VS 编译的 32 位和 64 位程序,int、long 和 long long 的最大值将相同。
  • @chris: 还有保证int代表±32,767,long代表±2,147,483,647,long long代表±9,223,372,036,854,775,807。
  • @chris:在“numeric_limits members”部分中,min() 是“等效于 CHAR_MINSHRT_MINFLT_MINDBL_MIN 等”。这些是通过参考 C 标准来定义的。

标签: c++


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    但是状态是这样的:

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

    如果您希望使用特定大小的整数,我建议您包含“inttypes.h”并使用 int_8t、int16_t、int32_t、int64_t 等...

    【讨论】:

    • 其实是保证sizeof(char) == 1。该标准还将“字节”定义为“char 是什么”,无论它是否恰好是 8 位。
    • 很好,我确实知道第一部分,第二部分我不知道。我修正了我的答案以反映这一点。
    【解决方案3】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-16
        • 2020-08-09
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        • 2012-03-21
        • 1970-01-01
        相关资源
        最近更新 更多