【发布时间】:2012-07-28 05:24:29
【问题描述】:
我最近看到一个说法,说 C 中的“char”类型实际上是一种特殊形式的整数——它存储代表字符和符号的 ASCII 代码数字。
这在多大程度上有效?这就引出了另一个问题——char 类型真的可以在 C 中归类为整数吗?
【问题讨论】:
我最近看到一个说法,说 C 中的“char”类型实际上是一种特殊形式的整数——它存储代表字符和符号的 ASCII 代码数字。
这在多大程度上有效?这就引出了另一个问题——char 类型真的可以在 C 中归类为整数吗?
【问题讨论】:
是的,在 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。
【讨论】:
char 类型是 C 中的一个 integral 类型,它与 short、int、long 等其他整型类型属于同一家族... . 整数类型可以存储整数值,最多可存储用于描述整数类型的编码位数。例如,在大多数平台上,char 是 8 位或一个字节,因此它最多可以表示 2^8 个不同的值。
【讨论】:
是的,char(通常)是一个单字节整数。除非编译器知道以不同的方式对待它,通常使用 ASCII 字符语义。许多库/头文件定义了一个BYTE 类型,它只不过是一个unsigned char,用于存储单字节整数。
【讨论】: