我最近看到一个声明,说 C 中的“char”类型实际上是一种特殊形式的整数——它存储代表字符和符号的 ASCII 码数字。
这在多大程度上有效?这导致了另一个问题 - char 类型真的可以在 C 中归类为整数吗?
是的,在 C 中,char
被认为是整数类型。它至少需要 8 位。a 和 byte 存储之间的等价物char
是相当明确的,而不仅仅是通常发生的事情。例如,(C99,§5.2.4.2.1/1):
number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8
因此,achar
始终只占用一个字节,它必须至少为 8 位。如果它更大,它仍然只占用一个字节——但那个字节恰好大于 8 位。
就持有 ASCII 码而言,这通常是正确的,但不一定如此。在诸如 IBM 大型机之类的东西上,它可能会保存 EBCDIC 代码。在更常见的机器上,“ASCII”或多或少是偶然发生的,但是当编码非英文字符时,你很快就会发现它并不是真正存储 ASCII。它通常存储 ISO 8859/x,或者可能是 Unicode UTF-8。
该char
类型是 C 中的整数类型,与其他整数类型(如short
、int
、long
等)属于同一家族。 整数类型可以存储整数值,最多可存储用于描述整数类型的编码位数。例如,在大多数平台上,achar
是 8 位或一个字节,因此它最多可以表示 2^8 个不同的值。
是的,a char
(通常)是一个单字节整数。除了编译器知道以不同的方式处理它,通常使用 ASCII 字符语义。许多库/头文件定义了一个BYTE
类型,只不过是一个unsigned char
,用于存储单字节整数。