【问题标题】:The size of a char and an int in CC中char和int的大小
【发布时间】:2021-10-11 18:34:33
【问题描述】:

在 C 编程语言中,如果一个 int 是 4 个字节,而字母在 ASCII 中表示为一个数字(也是一个 int),那么为什么一个 char 是 1 个字节?

【问题讨论】:

标签: c char integer byte


【解决方案1】:

char 是一个字节,因为标准是这样说的。但这并不是你真正要问的。就char 的十进制值而言,它可以容纳从-128 到127,查看ASCII 字符代码表,您会注意到这些代码的十进制值在0 到127 之间,因此,它们符合char 的正值。有使用 unsigned char 的扩展字符集,值从 0 到 255。

【讨论】:

    【解决方案2】:

    在 C 语言中,一个字符的大小通常为 8 位。 在我见过的所有编译器中(诚然,不是很多),char 被认为足够大以容纳 ASCII 字符集(或所谓的“扩展 ASCII”)和 char 数据的大小类型为 8 位(这包括主要桌面平台中的编译器和一些嵌入式系统)。 1 个字节足以表示整个字符集。

    【讨论】:

      【解决方案3】:
      6.2.5 类型
      ...
      3 声明为char 类型的对象大到足以存储基本执行字符集的任何成员。如果基本执行字符集的成员存储在char 对象中,则其值保证为非负数。如果任何其他字符存储在char 对象中,则结果值是实现定义的,但应在该类型可以表示的值范围内。
      ...
      5 声明为signed char 类型的对象占用与“普通”char 对象相同的存储量。 “普通”int 对象具有执行环境架构所建议的自然大小(大到足以包含 INT_MININT_MAX 范围内的任何值,如标题 <limits.h> 中定义的那样)。
      C 2012 Online Draft

      类型大小不是根据位来定义的,而是根据必须表示的值的范围来定义的。

      基本执行字符集由大约 96 个字符组成(26 个大写拉丁字符、26 个小写拉丁字符、10 个十进制数字、29 个图形字符、空格、垂直制表符、水平制表符、换行符,换页); 8 位足以表示这些。

      int,OTOH,必须能够表示更广泛的值;标准中规定的最小范围是[-32767..32767]1,尽管在​​大多数现代实现中它要宽得多。


      1. 标准不假定有符号整数的二进制补码表示,这就是为什么INT_MIN-32767 而不是-32768

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-01
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        相关资源
        最近更新 更多