“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中的整数类型,它与其他整数类型(如shortintlong等)属于同一类。整数类型可以存储整数值,最多可达到用于描述的编码位数整体式。 例如,在大多数平台上, char是8位或1字节,因此它可以表示最多2 ^ 8个不同的值。