【问题标题】:Relation between word length, character size, integer size and byte字长、字符大小、整数大小和字节之间的关系
【发布时间】:2010-10-16 10:43:19
【问题描述】:

C++中字长、字符大小、整数大小和字节之间的关系是什么?

【问题讨论】:

标签: c++ word int byte


【解决方案1】:

标准要求某些类型具有 最小 大小(short 至少为 16 位,int 至少为 16 位等),并且某些类型组是有序的 (sizeof(int) > = sizeof(short) >= sizeof(char))。

【讨论】:

  • 应该做一个小的编辑 - int 只需要至少 16 位。
  • 是的。检查它,修复它。谢谢。
【解决方案2】:

标准不知道处理器使用的这个“词”。但它说“int”类型应该具有执行环境的自然大小。但即使对于 64 位环境,int 通常也只有 32 位。所以标准术语中的“单词”几乎没有共同的含义(当然除了常见的英语“单词”)。

字符大小是字符的大小。那要看你说的是什么角色了。字符类型有 char、unsigned char 和 signed char。 wchar_t 还用于存储可以具有任何大小的字符(由实现确定 - 但必须使用其中一种整数类型作为其基础类型。很像枚举),而 char/signed char 或 unsigned char 必须有一个字节。这意味着一个字节的位数与一个字符的位数一样多。如果一个实现说一个 char 类型的对象有 16 位,那么一个字节也有 16 位。

现在一个字节是一个字符占用的大小。它是一个单位,而不是某种特定类型。没有更多关于它的内容,只是它是您可以访问内存的单元。即您没有对位域的指针访问权限,但您可以访问从一个字节开始的单元。

“整数大小”现在相当宽。你的意思是?所有 bool、char、short、int、long 和它们的 unsinged 对应物都是整数。它们的范围就是我所说的“整数大小”,它记录在 C 标准中 - 由 C++ 标准接管。对于有符号字符,范围是 -127 127,对于 short 和 int,它是相同的,并且是 -2^15+1 2^15-1,对于 long,它是 -2^31+1 2^31-1。它们的无符号对应值分别从 0 到 2^8-1、2^16-1 和 2^32-1。然而,这些都是最小的尺寸。也就是说,一个 int 在任何平台上都可能没有最大大小 2^14,因为它当然小于 2^15-1。对于这些值,需要最少的位。对于 char 为 8,short/int 为 16,long 为 32。负数的二进制补码表示不是必需的,这就是为什么负值不是 -128 而不是 -127 的原因,例如签名字符。

【讨论】:

    【解决方案3】:

    sizeof( char ) == 1(一个字节)(在 C++ 中,在 C 中 - 未指定)
    sizeof( int ) >= sizeof( 字符 )
    word - 不是 c++ 类型,通常在计算机体系结构中它意味着 2 个字节

    【讨论】:

      【解决方案4】:

      在 C++ 中,char 必须足够大以容纳实现的基本字符集中的任何字符。

      int 具有“执行环境架构建议的自然大小”。请注意,这意味着 int not 的大小至少需要为 32 位。 int 是 16 位的实现很常见(想想嵌入式 ot MS-DOS)。

      以下内容摘自 C++98 和 C99 标准的各个部分:

      • long int 必须至少与 int 一样大
      • int 必须至少与 short 一样大
      • short 必须至少与 char 一样大

      请注意,它们的大小可能都相同。

      另外(假设一个二进制补码实现):

      • long int 必须至少为 32 位
      • int 必须至少为 16 位
      • short 必须至少为 16 位
      • char 必须至少为 8 位

      【讨论】:

        【解决方案5】:

        标准 C++ 没有名为 wordbyte 的数据类型。其余的都很好地定义为范围。基数是char,它有CHAR_BITS 位。 CHAR_BITS 最常用的值是 8。

        【讨论】:

        • @Artyom:我指定了字节的含义(因为它不需要总是 8 位——这是一个常见的误解)。
        【解决方案6】:

        有点取决于你所说的关系。数字类型的大小通常是机器字大小的倍数。一个字节就是一个字节就是一个字节——8位,不多也不少。我相信一个字符在标准中定义为单个无符号字节(有关详细信息,请查看您的 ARM)。

        一般规则是,不要对数据类型的实际大小做出任何假设。该标准规定了类型之间的关系,例如“long”整数将与“int”大小相同或大于“int”。该语言的各个实现将为他们方便的类型选择特定的大小。例如,64 位处理器的编译器将选择与 32 位处理器的编译器不同的大小。

        您可以使用 sizeof() 运算符来检查您正在使用的编译器的特定大小(在特定目标体系结构上)。

        【讨论】:

          猜你喜欢
          • 2018-03-14
          • 1970-01-01
          • 2010-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-20
          • 1970-01-01
          相关资源
          最近更新 更多