-
Notifications
You must be signed in to change notification settings - Fork 0
/
ch02s06.html
3 lines (3 loc) · 6.3 KB
/
ch02s06.html
1
2
3
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>6. 字符类型与字符编码</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch02.html" title="第 2 章 常量、变量和表达式" /><link rel="prev" href="expr.expression.html" title="5. 表达式" /><link rel="next" href="ch03.html" title="第 3 章 简单函数" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">6. 字符类型与字符编码</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="expr.expression.html">上一页</a> </td><th width="60%" align="center">第 2 章 常量、变量和表达式</th><td width="20%" align="right"> <a accesskey="n" href="ch03.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2709590"></a>6. 字符类型与字符编码</h2></div></div></div><p>字符常量或字符型变量也可以当作整数参与运算,例如:</p><pre class="programlisting">printf("%c\n", 'a'+1);</pre><p>执行结果是<code class="literal">b</code>。</p><p>我们知道,符号在计算机内部也用数字表示,每个字符在计算机内部用一个整数表示,称为字符编码(Character Encoding)<a id="id2709621" class="indexterm"></a>,目前最常用的是ASCII码(American Standard Code for Information Interchange,美国信息交换标准码)<a id="id2709630" class="indexterm"></a>,详见<a class="xref" href="apas01.html#app-encoding.ascii">图 A.1 “ASCII码表”</a>。表中每一栏的最后一列是字符,前三列分别是用十进制(Dec)、十六进制(Hx)和八进制(Oct)表示的字符编码,各种进制之间的换算将在<a class="xref" href="ch14s02.html#number.convert">第 2 节 “不同进制之间的换算”</a>介绍。从十进制那一列可以看出ASCII码的取值范围是0~127。表中的很多字符是不可见字符(Non-printable Character)<a id="id2709654" class="indexterm"></a>或空白字符(Whitespace)<a id="id2709660" class="indexterm"></a><sup>[<a id="id2709665" href="#ftn.id2709665" class="footnote">3</a>]</sup>,不能像字母a这样把字符本身填在表中,而是用一个名字来描述该字符,例如CR(carriage return)、LF(NL line feed,newline)、DEL等等。作为练习,请读者查一查<a class="xref" href="ch02s01.html#expr.escapeseq">表 2.1 “C标准规定的转义字符”</a>中的字符在ASCII码表中的什么位置。</p><p>回到刚才的例子,在ASCII码中字符<code class="literal">a</code>是97,字符<code class="literal">b</code>是98。计算<code class="literal">'a'+1</code>这个表达式,应该按ASCII码把<code class="literal">'a'</code>当作整数值97,然后加1,得到98,然后<code class="literal">printf</code>把98这个整数值当作ASCII码来解释,打印出相应的字符<code class="literal">b</code>。</p><p>之前我们说“<span class="quote">整型</span>”是指<code class="literal">int</code>型,而现在我们知道<code class="literal">char</code>型本质上就是整数,只不过取值范围比<code class="literal">int</code>型小,所以<span class="emphasis"><em>以后我们把<code class="literal">char</code>型和<code class="literal">int</code>型统称为整数类型(Integer Type)<a id="id2709760" class="indexterm"></a>或简称整型</em></span>,以后我们还要学习几种类型也属于整型,将在<a class="xref" href="ch15s01.html#type.integertype">第 1 节 “整型”</a>详细介绍。</p><p>字符<code class="literal">'a'</code>~<code class="literal">'z'</code>、<code class="literal">'A'</code>~<code class="literal">'Z'</code>、<code class="literal">'0'</code>~<code class="literal">'9'</code>的ASCII码都是连续的,因此表达式<code class="literal">'a'+25</code>和<code class="literal">'z'</code>的值相等,<code class="literal">'0'+9</code>和<code class="literal">'9'</code>的值也相等。注意<code class="literal">'0'</code>~<code class="literal">'9'</code>的ASCII码是十六进制的30~39,和整数值0~9是不相等的。</p><p>字符也可以用ASCII码转义序列表示,这种转义序列由\加上1~3个八进制数字组成,或者由<code class="literal">\x</code>或大写<code class="literal">\X</code>加上1~2个十六进制数字组成,可以用在字符常量或字符串字面值中。例如<code class="literal">'\0'</code>表示NUL字符(Null Character)<a id="id2709863" class="indexterm"></a>,<code class="literal">'\11'</code>或<code class="literal">'\x9'</code>表示Tab字符,<code class="literal">"\11"</code>或<code class="literal">"\x9"</code>表示由Tab字符组成的字符串。注意<code class="literal">'0'</code>的ASCII码是48,而<code class="literal">'\0'</code>的ASCII码是0,两者是不同的。</p><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.id2709665" href="#id2709665" class="para">3</a>] </sup>空白字符在不同的上下文中有不同的含义,在C语言中空白字符定义为空格、水平Tab、垂直Tab、换行和分页符,本书在使用“<span class="quote">空白字符</span>”这个词时会明确说明在当前上下文中空白字符指的是哪些字符。</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="expr.expression.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch03.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">5. 表达式 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 3 章 简单函数</td></tr></table></div></body></html>