1.3.3 数据在计算机中的表示
数据是计算机处理的对象。数据包括数值、文字、语言、图形、图像、视频等各种数据形式。计算机硬件的各部分均由两个稳定状态的物理元件组成,因此,计算机中的数据和指令都是用二进制代码表示的。
1.数制
按进位的原则进行计数称为进位计数制,简称数制。长期以来人们在日常生活中形成了多种进位计数制,不仅有经常使用的十进制,还有十二进制(年份)、六十进制(分、秒的计时)等。计算机的内部使用二进制,但二进制数码冗长,书写和阅读都不太方便,所以在编写程序时多用八进制、十进制、十六进制数等来代替二进制数。
(1)十进制数
十进制使用数字0、1、2、3、4、5、6、7、8、9来表示数值,且采用“逢十进一”的进位计数制。因此十进制数中处于不同位置上的数字代表不同的值。例如,小数点左面第1位为个位,小数点左面第2位为十位,小数点左面第3位为百位,而小数点右面第1位为1/10,小数点右面第2位为1/100等。这称为数的位权表示。每一个数字的权是由10的幂次决定的,这个10称为十进制的基数。例如1234.5可表示为
1234.5=1×103+2×102+3×101+4×100+5×10-1
事实上,无论哪一种数制,其计数和运算都具有共同的规律与特点。采用位权表示的数制具有以下3个特点。
① 数字的总个数等于基数,如十进制数使用10个数字(0~9)。
② 最大的数字比基数小1,如十进制中最大的数字为9。
③ 每个数字都要乘以基数的幂次,该幂次由每个数字所在的位置决定。
一般地,对于N进制而言,基数为N,使用N个数字表示数值,其中最大的数字为N−1,任何一个N进制数A:
A=AnAn-1An-2…A1A0A-1A-2…A-m
均可表示为以下形式:
(2)二进制数
二进制使用数字0、1来表示数值,且采用“逢二进一”的进位计数制。二进制数中处于不同位置上的数字代表不同的值。每一个数字的权由2的幂次决定,二进制数的基数为2。例如,二进制数(1001.1011)2可表示为
(1001.1011)2=1×23+0×22+0×21+1×20+1×2-1+0×2-2+1×2-3+1×2-4
(3)八进制数
八进制使用数字0、1、2、3、4、5、6、7来表示数值,且采用“逢八进一”的进位计数制。八进制数中处于不同位置上的数值代表不同的值。每一个数字的权由8的幂次决定,八进制数的基数为8。例如,八进制数(32.17)8可表示为
(32.17)8=3×81+2×80+1×8-1+7×8-2
(4)十六进制数
十六进制使用数字0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F来表示数值,其中A、B、C、D、E、F分别表示数字10、11、12、13、14、15。十六进制数的计数方法为“逢十六进一”,十六进制数中处于不同位置上的数值代表不同的值。每一个数字的权由16的幂次决定,十六进制数的基数为16。
例如,十六进制数的(5D6)16可表示为
(5D6)16=5×162+13×161+6×160
以上介绍的几种常用数制的基数和数字符号如表1-2所示。
表1-2 常用数制的基数和数字符号
2.不同数制之间转换
将数由一种数制转换为另一种数制称为数制之间的转换。在计算机中引入八进制、十进制和十六进制的目的是为了书写和表示上的方便,在计算机内部信息的存储和处理仍然采用二进制数。
(1)十进制数转换为其他进制数
将十进制数转换为其他进制数分为整数和小数两部分进行转换。
① 十进制整数转换为其他进制整数
转换原则:除基取余法,即将十进制数逐次除以转换数制的基数,直到商为0为止,然后将所得的余数倒序排列。
② 十进制小数转换为其他进制小数
转换原则:乘基取整法,即将十进制小数逐次乘以转换数制的基数,直到小数的当前值等于0或满足所要求的精度为止,最后将所得到的乘积的整数部分顺序排列。
【例1-1】将十进制数46.25转换为二进制数。
【解】46÷2=23 …余0
23÷2=11 …余1
11÷2=5 …余1
5÷2=2 …余1
2÷2=1 …余0
1÷2=0 …余1
0.25×2=0.5 …取整得0
0.5×2=1.0 …取整得1
结果为46.25=101110.01B
(2)其他进制数转换为十进制数
转换原则:按权展开求和。
【例1-2】将二进制数10111.11转换为十进制数。
【解】10111.11B=(1×24+0×23+1×22+1×21+1×20+1×2-1+1×2-2)D=23.75D
【例1-3】将八进制数172转换为十进制数。
【解】172Q=(1×82+7×81+2×80)D=122D
(3)二进制数与八进制数、十六进制数之间的转换
① 二进制数与八进制数之间的转换
转换原则:三位一组法。
【例1-4】将二进制数11100010011转换为八进制数。
【解】
② 二进制数与十六进制数之间的转换
转换原则:四位一组法。
【例1-5】将二进制数11100011101转换为十六进制数。
【解】
表1-3列出了二进制、八进制、十进制和十六进制的对应关系,借助该表可以方便地进行数制之间的转换。
表1-3 二进制、八进制、十进制和十六进制换算表
3.数据单位
任何类型的数据在计算机内均表示为二进制形式,二进制在计算机中有不同的度量单位。
(1)位
位(bit)也称为比特,是计算机存储数据的最小单位,是二进制数据中的一个位,一位表示二进制信息0或1。一个二进制位表示21=2种状态,例如,ASCII码用7位二进制组合编码,能表示27=128个信息。
(2)字节
字节(Byte)简记为B,规定一个字节等于8个二进制数位,即1B=8bit。字节是数据处理的基本单位,即以字节为单位存储和解释信息。通常,一个ASCII码用1个字节存放,一个汉字国标码用2个字节存放。
在计算机中,经常使用的度量单位有KB、MB、GB和TB,它们之间的相互关系为
1KB=210B=1024B
1MB=210KB=1024KB
1GB=210MB=1024MB
1TB=210GB=1024GB
4.信息的编码方式
计算机内部采用的是二进制的方式计数,因此输入到计算机中的各种数字、文字、符号或图形等数据都是用二进制数编码的。不同类型的字符数据其编码方式是不同的,编码的方法也很多。下面介绍最常用的ASCII码、汉字编码和图像编码。
(1)ASCII码
ASCII 码是由美国国家标准委员会制定的一种包括数字、字母、通用符号、控制符号在内的字符编码,全称为美国国家信息交换标准代码(American Standard Code for Information Interchange)。
ASCII码能表示128种国际上通用的西文字符,只需用7个二进制位(27=128)表示。ASCII码采用7位二进制表示一个字符时,为了便于对字符进行检索,把7位二进制数分为高3位(b7b6b5)和低4位(b4b3b2b1)。7位ASCII编码如表1-4所示。利用该表可查找字母、运算符、标点符号以及控制字符与 ASCII 码之间的对应关系。例如,大写字母“A”的 ASCII 码为1000001,小写字母“a”的ASCII码为1100001。
表1-4 7位ASCII码编码表
续表
表中高3位为000和001的两列是一些控制符。例如,“NUL”表示空白,“ETX”表示文本结束,“CR”表示回车,“SP”表示空格,“DEL”表示删除等。
(2)汉字编码
计算机在处理汉字时也要将其转换为二进制码,这就需要对汉字进行编码。汉字具有特殊性,因此随着汉字输入、输出、存储和处理过程不同,所使用的汉字代码也不同。例如,汉字录入需用输入码(外码),计算机内部的汉字存储和处理要用机内码,汉字显示用显示字模点阵码,汉字输出用字形码等。
① 国标码
我国根据有关国际标准于1980年制定并颁布了中华人民共和国国家标准信息交换用汉字编码 GB2312-80,简称国标码。国标码的字符集共收录6763个常用汉字和682个非汉字图形符号,其中使用频度较高的3755个汉字为一级字符,以汉语拼音为序排列,使用频度稍低的3008个汉字为二级字符,以偏旁部首进行排列。682个非汉字字符主要包括拉丁字母、俄文字母、日文假名、希腊字母、汉语拼音符号、汉语注音字母、数字、常用符号等。
② 汉字机内码
汉字的机内码是计算机系统内部对汉字进行存储、处理、传输统一使用的代码,又称为汉字内码。由于汉字数量多,一般用2个字节来存放一个汉字的内码。在计算机内汉字字符必须与英文字符区别开,以免造成混乱,英文字符的机内码是用一个字节来存放 ASCII 码,一个ASCII码占一个字节的低7位,最高位为0,为了区分,汉字机内码中两个字节的每个字节的最高位置为1。
③ 汉字输入码
汉字主要是从键盘输入,汉字输入码是计算机输入汉字的代码,是代表某一个汉字的一组键盘符号。汉字输入码也叫外部码(简称外码)。现行的汉字输入方案众多,常用的有拼音输入和五笔字型输入等。每种输入方案对同一汉字的输入编码都不相同,但经过转换后存入计算机的机内码均相同。
④ 汉字字型码
存储在计算机内的汉字在屏幕上显示或在打印机上输出时,必须以汉字字形输出,才能被人们所接受和理解。计算机中汉字字形是以点阵方式表示汉字的,就是将汉字分解成由若干个“点”组成的点阵字形,将此点阵字形置于网状方格上,每一小方格就是点阵中的一个“点”。以24×24点阵为例,网状横向划分为24格,纵向也分成24格,共576个“点”,点阵中的每个点可以有黑、白两种颜色,有字形笔画的点用黑色,反之用白色,用这样的点阵就可以描写出汉字的字形了。图1-5所示是汉字“跑”的字形点阵。
根据汉字输出精度的要求,有不同密度点阵。汉字字形点阵有16×16、24×24、32×32、48×48等类型。汉字字形点阵中每个点的信息用一位二进制码来表示,1表示对应位置处是黑点,0表示对应位置处是空白。
字形点阵的信息量很大,所占存储空间也很大。例如,16×16点阵,每个汉字要占32个字节,24×24点阵,每个汉字要占72个字节。因此字形点阵只用来构成“字库”,而不能用来代替机内码用于机内存储,字库中存储了每个汉字的字形点阵代码,不同的字体对应不同的字库。在输出汉字时,计算机要先到字库中找到它的字形描述信息,然后输出字形。汉字信息处理过程如图1-6所示。
图1-5 汉字“跑”的字形点阵
图1-6 汉字信息处理过程