一站式学习C编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 字符类型与字符编码

字符常量或字符型变量也可以当做整数参与运算,例如:

      printf("%c\n", 'a'+1);

执行结果是b。

我们知道,符号在计算机内部也用数字表示,每个字符在计算机内部用一个整数表示,称为字符编码(Character Encoding),目前最常用的是ASCII码(American Standard Code for Information Interchange),详见表A.1。表中每一栏的最后一列是字符,前三列分别是用十进制(Dec)、十六进制(Hx)和八进制(Oct)表示的字符编码,各种进制之间的换算将在第13.2节介绍。从十进制那一列可以看出ASCII码的取值范围是0~127。表中的很多字符是不可见字符(Non-printable Character)和空白字符(Whitespace)空白字符在不同的上下文中有不同的含义,在C语言中空白字符定义为空格、水平Tab(\t)、垂直Tab(\v)、换行(\r和\n)和分页符(\f),本书在使用“空白字符”这个词时会明确说明在当前上下文中空白字符指的是哪些字符。,不能像字母a这样把字符本身填在表中,而是用一个名字来描述该字符,例如CR(Carriage Return)、LF(NL Line Feed,Newline)、DEL等。作为练习,请读者查一查表2.1中的字符在ASCII码表中的什么位置。

回到刚才的例子,在ASCII码中字符a是97,字符b是98。计算'a'+1这个表达式,应该按ASCII码把'a'当做整数值97,然后加1,得到98,然后printf把98这个整数值当做ASCII码来解释,打印出相应的字符b。

之前我们说“整型”是指int型,而现在我们知道char型本质上就是整数,只不过取值范围比int型小,所以以后我们把char型和int型统称为整数类型(Integer Type)或简称整型,后面我们还要学习几种类型也属于整型,将在第14.1节详细介绍。

字符'a'~'z'、'A'~'Z'、'0'~'9'的ASCII码都是连续的,因此表达式'a'+25和'z'的值相等,'0'+9和'9'的值也相等。注意'0'~'9'的ASCII码是十六进制的30~39,和整数值0~9是不相等的。

字符也可以用ASCII码转义序列表示,这种转义序列由\加上1~3个八进制数字组成,或者由\x加上1~2个十六进制数字组成,可以用在字符常量或字符串字面值中。例如'\0'表示NUL字符(Null Character),'\11'或'\x9'表示Tab字符,"\11"或"\x9"表示由Tab字符组成的字符串。注意'0'的ASCII码是48,而'\0'的ASCII码是0,两者是不同的。