2.6. 字符类型与字符编码

时间 : 16-04-13 栏目 : linux编程 作者 : 老薛 评论 : 0 点击 : 1,047 次

字符型常量或变量也可以参与运算,例如: printf("%c\n", 'a'+1);
执行结果是b。 我们在第 1.1 节 “程序和编程语言”讲过,计算机之所以能处理符号,是因为符号在计算机内部也用数字来表示,每个字符在计算机内部都用一个整数来表示,称为字符编码(Character Encoding),目前大部分平台通用的是ASCII 码(American Standard Code for Information Interchange,美国信
息交换标准码),详见图 A.1 “ASCII 码表”。表中每一栏的最后一列是字符,前三列分别是用十进制(Dec)、十六进制(Hx)和八进制(Oct)表示的

字符编码,有关各种进制之间的换算以后再讲,从十进制那一列可以看出ASCII 码的取值范围是 0~127。表中的很多字符是不可见字符(Non-printable Character)和空白字符(Whitespace)[6],不能像'a'这样把字符本身填在表中,而是要用一个名字来表示,例如CR(carriage return)、LF(NL line feed,newline)、DEL等等。作为练习,请读者查一查表 2.1 “C 标准规定的转义字符”中的字符都在 ASCII 码表的什么位置。

      回到刚才的例子,在 ASCII 码中字符'a'是 97,字符b是98。'a'+1这个表达式,根据隐式类型转换规则要把字符型转成整型再做计算,也就是把'a'按
ASCII 码转成整型的 97,然后加 1,得到 98,现在表达式的值是一个整型,而printf 却以%c的格式打印它,于是printf把这个整数当作 ASCII 码来解
释,打印出相应的字符'b'。 之前我们说“整型”是指int型,而现在我们知道char型本质上就是整数,只不过取值范围比int型小,所以以后我们把char型和int型统称为整数类型(Integer Type)或简称整型。其实还有几种我们没学到的类型也属于整型,我们将在第 15 章 数据类型详解总结一下整型包括哪些类型。 在 ASCII 码表中,字符'a'~'z'、'A'~'Z'、'0'~'9'的 ASCII 码都是连续的,例如'a'+1 和'b'的值相等,'0'+9 和'9'的值相等。注意'0'~'9'的 ASCII 码是十
六进制的 30~39,这是字符型'0'~'9'和整数 0~9 的区别。 字符也可以用 ASCII 码的转义序列表示,这种表示可以用在字符常量或字符串字面值中,例如'\0'表示 NUL 字符,'\11'或'\x9'表示 Tab 字符,"\11"或"\x9"表示由 Tab 字符组成的字符串。这种转义序列由\加上 1~3 个八进制数字组成,或者由\x(大写的\X 也可以)加上 1~2 个十六进制数字组成。 读者可能会奇怪,为什么需要规定一个转义序列\?呢?因为 C 语言规定了一些三连符(Trigraph),在某些特殊的终端上缺少某些字符,需要用 Trigraph输入,例如??=表示#。Trigraph 极不常用,介绍这个只是为了让读者理解 C 语
言规定转义序列的作用,即特殊字符转普通字符,普通字符转特殊字符,\?属于前者。极不常用的 C 语法在本书中通常不会介绍。 [5] 更准确地说是声明了四个变量,定义(Definition)和声明(Declaration)之间的关系是:如果一个声明同时也要求分配存储空间,则称为定义。在下一章我们会看到哪些函数声明同时也是定义,哪些不是定义,以后我们还会看到哪些变量声明不分配存储空间因而不是定义。接下来几章的例子中声明的变量
都是分配存储空间的,都用“定义”这个词。 [6] Whitespace 在不同的上下文中有不同的含义,在 C 语言中 Whitespace 定义为空格、水平 Tab、垂直 Tab、换行和分页符以及这些字符的某些组合,本书在使用 Whitespace 这个词时会明确说明指的是哪些字符。

本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/xtyw003/1664.html

2.6. 字符类型与字符编码:等您坐沙发呢!

发表评论

4 + 2 = ?


博主微信号,很高兴为您提供帮助

随便看看

0