“char”是一种特殊类型的整数变量吗?
我最近遇到一个声明说c中的“char”类型实际上是一种特殊forms的整数 – 一种存储代表字符和符号的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
(通常)是一个字节的整数。 除了编译器知道以不同方式对待它,通常使用ASCII字符语义。 许多库/头定义了一个BYTE
类型,它只是一个unsigned char
,用于存储一个字节的整数。
char
类型是C中的整数类型,它与其他整数类型(如short
, int
, long
等)属于同一类。整数类型可以存储整数值,最多可达到用于描述的编码位数整体式。 例如,在大多数平台上, char
是8位或1字节,因此它可以表示最多2 ^ 8个不同的值。