【问题标题】:Is "char" a special type of integer variable?“char”是一种特殊类型的整数变量吗?
【发布时间】:2012-07-28 05:24:29
【问题描述】:

我最近看到一个说法,说 C 中的“char”类型实际上是一种特殊形式的整数——它存储代表字符和符号的 ASCII 代码数字。

这在多大程度上有效?这就引出了另一个问题——char 类型真的可以在 C 中归类为整数吗?

【问题讨论】:

标签: c gcc


【解决方案1】:

是的,在 C 中,char 被视为整数类型。它至少需要 8 位。 char 和存储字节之间的等价物是相当明确的,而不仅仅是通常发生的事情。例如,(C99,§5.2.4.2.1/1):

number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT                                            8

因此,char 始终只占用一个字节,该字节必须至少为 8 位。如果它更大,它仍然只占用一个字节——但那个字节恰好大于 8 位。

就持有 ASCII 码而言,这通常是正确的,但不一定如此。在诸如 IBM 大型机之类的东西上,它可能会保存 EBCDIC 代码。在更常见的机器上,“ASCII”或多或少是偶然发生的,但是当编码非英文字符时,你很快就会发现它并不是真正存储 ASCII。它通常存储 ISO 8859/x,或者可能是 Unicode UTF-8。

【讨论】:

  • 当你说“如果它更大,它仍然只占用一个字节——但那个字节恰好大于 8 位。” “但是那个字节恰好大于 8 位”是什么意思。
  • 我也对此感到困惑。怎么可能是一个字节却超过8位?
  • @BoredComedy:“字节”通常是机器“存储”的最小单位。例如,某些 DSP 将内容存储在 16 位或 24 位块中,并且根本无法使用 8 位值 - 所以在该硬件上,一个字节分别是 16 位或 24 位。当他们特别关心 8 位单元(如许多网络标准等)时,他们通常使用“八位字节”这个词,而不是“字节”。
【解决方案2】:

char 类型是 C 中的一个 integral 类型,它与 shortintlong 等其他整型类型属于同一家族... . 整数类型可以存储整数值,最多可存储用于描述整数类型的编码位数。例如,在大多数平台上,char 是 8 位或一个字节,因此它最多可以表示 2^8 个不同的值。

【讨论】:

    【解决方案3】:

    是的,char(通常)是一个单字节整数。除非编译器知道以不同的方式对待它,通常使用 ASCII 字符语义。许多库/头文件定义了一个BYTE 类型,它只不过是一个unsigned char,用于存储单字节整数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2011-05-07
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      相关资源
      最近更新 更多