我最近发现一个声明说c中的"char"类型实际上是一种特殊的整数形式 - 一种存储代表字符和符号的ASCII代码.这有效期有多远?这导致另一个问题 - 真的char类型可以归类为C中的整数吗?
是的,在C中,char
被认为是整数类型.它必须至少有8位.a char
和一个字节的存储之间的等价物是相当明确的,而不仅仅是通常发生的事情.例如,(C99,§5.2.4.2.1/ 1):
number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8
Run Code Online (Sandbox Code Playgroud)
因此,a char
总是占用一个字节,必须至少为8位.如果它更大,它仍然只占用一个字节 - 但该字节恰好大于8位.
就持有ASCII码而言,这通常是正确的,但不一定如此.在类似IBM大型机的东西上,它可能会包含EBCDIC代码.在更常见的机器上,"ASCII"或多或少地偶然发生,但是当编码非英文字符时,你会很快发现它并不是真正存储ASCII.它通常存储ISO 8859/x,或者可能是Unicode UTF-8.
该char
类型是C 中的整型,与其他整型(例如 、 、 等)属于同一族short
。int
整型long
可以存储整个整数值,最多可达用于描述整型类型的编码位数。例如,在大多数平台上,achar
是八位或一个字节,因此它最多可以表示 2^8 个不同的值。
是的,a char
(通常)是一个单字节整数。除非编译器知道以不同的方式对待它,通常使用 ASCII 字符语义。许多库/头文件定义了一种BYTE
类型,只不过是一个unsigned char
, 用于存储单字节整数。