【问题标题】:Why short int and int has same size in 32bit architectures?为什么 short int 和 int 在 32 位架构中具有相同的大小?
【发布时间】:2020-10-21 02:53:43
【问题描述】:
#include <iostream>
 
int main()
{
    std::cout << "bool:\t\t" << sizeof(bool) << " bytes\n";
    std::cout << "char:\t\t" << sizeof(char) << " bytes\n";
    std::cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes\n";
    std::cout << "char16_t:\t" << sizeof(char16_t) << " bytes\n";
    std::cout << "char32_t:\t" << sizeof(char32_t) << " bytes\n";
    std::cout << "short:\t\t" << sizeof(short) << " bytes\n";
    std::cout << "int:\t\t" << sizeof(int) << " bytes\n";
    std::cout << "long:\t\t" << sizeof(long) << " bytes\n";
    std::cout << "long long:\t" << sizeof(long long) << " bytes\n";
    std::cout << "float:\t\t" << sizeof(float) << " bytes\n";
    std::cout << "double:\t\t" << sizeof(double) << " bytes\n";
    std::cout << "long double:\t" << sizeof(long double) << " bytes\n";
 
    return 0;
}

这将表明 int 和 short 在 32 位系统中具有相同的大小,但为什么呢? 布尔型 1 个字节
字符 1 个字节
wchar_t 1 字节
char16_t 2 个字节
char32_t 4 字节
短 2 个字节
整数 2 个字节
长 4 个字节
long long 8 字节
浮动 4 个字节
双 8 字节
长双 8 字节

【问题讨论】:

  • 您的编译器、编译器版本、目标和编译器选项是什么? (本质上是 GCC 上 -v 的输出)
  • 在 32 位系统上不常见,但 C++ 仅保证 16 位 int。见en.cppreference.com/w/cpp/language/types#Properties
  • 在 32 位系统上,wchar_t 不应该是 1 字节,很少会看到 2 字节的 int。您使用的是什么编译器,您的目标平台是什么?你确定你不是为 16 位编译吗?

标签: c++


【解决方案1】:

为什么 short int 和 int 在 32 位架构中具有相同的大小?

问问自己:为什么它们的尺寸不一样?语言标准为两种类型的范围指定了相同的最小限制,并允许它们具有相同的大小。在某些语言实现中就是这种情况。

请注意,并非所有语言实现(无论是否为 32 位)都如此,并且在某些(例如 x86 CPU 架构上)大小确实不同。

【讨论】:

    【解决方案2】:

    语言定义对整数类型的大小和相对大小提出了一些要求。该标准不关心 32 位系统、64 位系统或您可能拥有的任何其他系统。

    尺寸要求是:

    char -- at least 8 bits
    short -- at least 16 bits
    int -- at least 16 bits
    long -- at least 32 bits
    long long -- at least 32 bits
    

    相对大小要求是,在上面的列表中,每种类型必须至少与其前面的类型一样大。 (例如,如果 short 是 32 位,int 必须至少是 32 位)。

    所以,就语言定义而言,shortint 的大小当然可以相同。在许多系统上都是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2015-04-03
      相关资源
      最近更新 更多