最近我看到一篇说法,称C语言中的“char”类型实际上是整型的一种特殊形式——它存储了代表字符和符号的ASCII码数字。
这个说法有多少可信度?这引出了另一个问题——在C语言中,char类型真的可以被归类为整型吗?
是的,在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语言中的一种整型,与其他整型如short
、int
、long
等处于同一类别。整型能够存储整数值,其最大值取决于编码位数。例如,在大多数平台上,char
类型是8位或1字节,因此它可以表示2^8个不同的值。
是的,char
通常是一个一字节的整数。除非编译器知道要以ASCII字符语义处理它。许多库/头文件定义了一个BYTE
类型,仅仅是一个unsigned char
,用于存储一字节的整数。