“char”是一种特殊类型的整数变量吗?

4

最近我看到一篇说法,称C语言中的“char”类型实际上是整型的一种特殊形式——它存储了代表字符和符号的ASCII码数字。

这个说法有多少可信度?这引出了另一个问题——在C语言中,char类型真的可以被归类为整型吗?


1
可能是Can the char type be categorized as a integer?的重复问题。 - pb2q
3个回答

12

是的,在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。


1
当你说“如果它更大,它仍然占用一个字节--但是那个字节恰好比8位更大。”时,“但是那个字节恰好比8位更大”是什么意思? - Vemuri Pavan
我也感到困惑。它怎么可能是一个字节,但又超过8位呢? - Bored Comedy
1
@BoredComedy:一个“字节”通常是机器存储的最小单位。例如,某些DSP将东西存储在16位或24位块中,并且根本没有办法处理8位值--因此,在该硬件上,一个字节分别为16位或24位。当他们特别关注8位单元时(如许多网络标准等),他们通常使用“八位组”而不是“字节”这个词。 - Jerry Coffin

5

char类型是C语言中的一种整型,与其他整型如shortintlong等处于同一类别。整型能够存储整数值,其最大值取决于编码位数。例如,在大多数平台上,char类型是8位或1字节,因此它可以表示2^8个不同的值。


5

是的,char通常是一个一字节的整数。除非编译器知道要以ASCII字符语义处理它。许多库/头文件定义了一个BYTE类型,仅仅是一个unsigned char,用于存储一字节的整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接