分类: C/C++
2009-04-29 18:45:24
char类型用于存储字母和标点符号之类的字符。但在技术实现上是char却是整数类型,这是因为char类型实际存储的是整数而不是字符。使用ASCII码的系统中,char类型通常定义为使用8 bit内存单元,标准的ASCII码值的范围从0到127,只需7 bit即可表示。所以更普遍一点看来,C保证char类型足够大,以存储其实现所在的系统上的基本字符集。
许多字符集包含远多于127甚至远多于255个值,例如:日本的kanji字符集;商用的Unicode字符集(目前已有超过96000个字符); ISO/IEC 10646字符集(和Unicode兼容)。C把一个字节(byte)定义为char类型使用的bit数,所以在以上的系统上,C文档中提到的一个字节是16位或者是32位,而不是约定的8位。
为了保证移植性,"char grade = 65;"如此的语句是一种不良的编程风格,仅对于ASCII是可以的,而使用'A'代替65则可以在任意系统中正常工作。
C将字符常量视为int类型而非char类型,可以定义一个字符常量'FATE',这将把4个独立的8位ASCII码存储在一个32位单元里(在int类型为32位的ASCII系统中),如果把这个字符常量赋给一个char变量,那么只有后8位会起作用,因此变量的值为'E',可以用putchar输出来作证明。