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

时间:2012-07-28 05:24:29

标签: c gcc

我最近发现一条声明说c中的“char”类型实际上是一种特殊的形式 整数 - 一个存储代表字符和符号的ASCII代码号。 这有效期有多远?这导致另一个问题 - 真的char类型可以归类为C中的整数吗?

3 个答案:

答案 0 :(得分:8)

是的,在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 :(得分:4)

是的,char是(通常)一个字节的整数。除了编译器知道以不同方式对待它,通常使用ASCII字符语义。许多库/头定义了一个BYTE类型,它只是一个unsigned char,用于存储一个字节的整数。

答案 2 :(得分:3)

char类型是C中的整数类型,与其他整数类型属于同一系列,例如shortint,{{ 1}}等等。积分类型可以存储整数值,最多可以存储用于描述整数类型的编码位数。例如,在大多数平台上,long是8位或一个字节,因此它可以表示最多2 ^ 8个不同的值。