购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

项目二
计算机中的数据表示及编码

【项目背景】

计算机内部所有的数据都是以0和1来表示的,这就是通常说的二进制数。而计算机中输入和输出的数据通常是以人们所习惯的十进制数来表示的。因此,各种字母、符号等数据在计算机中都要转换为二进制信息才能为计算机所识别。本任务主要讨论计算机中的字符和数据的表示,从而了解计算机内部信息的表示形式。

【项目目标】

(1)了解文档、图片、音频、视频等数据在计算机中的表示方法。

(2)了解数制的基本概念,掌握二进制、十进制及十六进制整数之间的转换。

(3)了解计算机中数据、字符和汉字的编码原理。

【业务咨询】

一、数据的表示

数制是人们在生产、生活中创造的计数方式,通俗说法就是“几进制就是满几进一”。例如,人们一般用的十进制就是满十进一,相应的数制还有二进制、八进制、十六进制等。生活中最常用的是十进制计数法。而计算机内部则采用的是二进制计数法,因为二进制计数法有如下特点:其一,简单可行,容易实现,适合逻辑运算。组成计算机的各部分电子元件可以用两个不同且相对稳定的状态(电流的有无、电压的高低)来表示二进制的0和1;二进制的0和1也可以与逻辑运算中的假(false)和真(true)相对应。其二,运算规则简单。例如逻辑加法:0+0=0,1+0=1,0+1=1,1+1=1。逻辑乘法:0×0=0,0×1=0,1×0=0,1×1=1。

(一) X 进制计数法的不同特点

1.十进制计数法的特点

(1)十进制遵守“满十进一”的加法规则。

(2)有10个不同的数字符号:0、1、2、3、4、5、6、7、8、9。

(3)某一个十进制数可能会由多位数字符号组成,每一个数字符号根据它所处的不同位置代表不同的数值。例如十进制数111,最右边的1表示的数是1,中间的1表示的数是10,最左边的1表示的数是100。因此:

十进制数321可以写成:321=3×10 2 +2×10 1 +1×10 0

十进制数321.123可以写成:321.123=3×10 2 +2×10 1 +1×10 0 +1×10 -1 +2×10 -2 +3×10 -3

以上称为数制的按权展开式。

同理,二进制计数法的特点不言而喻。

2.二进制计数法的特点

(1)二进制遵守“满二进一”的加法规则。

(2)有两个不同的数字符号:0、1。

(3)某一个二进制数可能会由多位数字符号组成,每一个数字符号根据它所处的不同位置代表不同的数值。例如二进制数111,最右边的1表示的数是1,中间的1表示的数是2,最左边的1表示的数是4,所以其值用十进制数来表示就是7(4+2+1)。因此:

二进制数111.111可以写成:111.111=1×2 2 +1×2 1 +1×2 0 +1×2 -1 +1×2 -2 +1×2 -3

上式则为二进制数111.111的按权展开式。

再举一个例子,把11111111按权展开为:

11111111=1×2 7 +1×2 6 +1×2 5 +1×2 4 +1×2 3 +1×2 2 +1×2 1 +1×2 0

=255

3.十六进制计数法的特点

(1)十六进制遵守“满十六进一”的加法规则。

(2)有16个不同的数字符号: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。十进制与十六进制之间的数值对应关系如表1-3所示。

表1-3 十进制与十六进制之间的数值对应关系

(3)某一个十六进制数可能会由多位数字符号组成,每一个数字符号根据它所处的不同位置代表不同的数值。例如十六进制数111,最右边的1表示的数是1,中间的1表示的数是16,最左边的1表示的数是16×16=256,所以其值用十进制数来表示就是273(256+16+1)。

(二)各种数制间的转换

为了区别不同进制数的表示,人们常在数字后加上大写英文字母表示不同的数制,数字后加B表示二进制数,如1010B表示二进制数1010;加D表示十进制数;加H表示十六进制数。

1.二进制数、十六进制数转换成十进制数

【例1-1】 将二进制数转换成十进制数。

1011.101B=1×2 3 +0×2 2 +1×2 1 +1×2 0 +1×2 -1 +0×2 -2 +1×2 -3

=8+0+2+1+0.5+0+0.125=11.625D

【例1-2】 将十六进制数转换成十进制数。

9AH=9×16+10

=154D

2.十进制数转换成二进制数

十进制数据整数部分转换成二进制采用的是倒除法,即“除2取余”的方法。具体过程介绍如下:

(1)将十进制数除以2,保存余数。

(2)若商为0,则进行第3步,否则,用商代替原十进制数,重复第1步。

(3)将所有的余数找出,最后得到的余数作为最高位,最先得出的余数作为最低位,由各余数依次排列而成的新的数据就是转换成二进制的结果。

【例1-3】 将237D转换成二进制数。

转换过程如图1-28所示。

图1-28 十进制数转换成二进制数

所以,237D=11101101B。

3.二进制数与十六进制数之间的转换

根据前述的换算关系,可以得到各进制的数值对应表(见表1-4)。

表1-4 各进制之间的数值对应关系

所以,在将二进制数转换成十六进制数时,从最右侧开始,每四位二进制数划为一组(不足四位的前面补0),用一位十六进制数代替;十六进制数转换成二进制数时正好相反,一位十六进制数用四位二进制数来替换。

【例1-4】 将二进制数10101101100B转换成十六进制数。

4.快速进行十进制数与二进制数之间的转换

通常,一个字节(单字节)范围内的十进制数转换成二进制数时,上述的除式法既长又烦琐,可以用表1-5的形式来快速计算。

例如,要把十进制数212转换成二进制数,可先进行一次加法运算:212=128+64+16+4。然后把128、64、16、4对应的空格填上1,其余的空格填上0,如表1-5所示。

表1-5 十进制数转换成二进制数

那么,11010100就是所要转换的二进制数。

二、字符编码

计算机中除了数值之外,还有一类非常重要的数据,就是字符,如英文的大小写字母(如A、B、C、a、b、c等),以及其他常用符号(如@、?、=、%、+等)。在计算机中,这些符号都是用二进制编码的形式表示的,即每一个字符被赋予一个唯一、固定的二进制编码。为了统一,人们制定了编码标准。目前,一般都是采用美国标准信息交换码(American standard code for information interchange)。它使用七位二进制编码来表示一个符号,通常把它称为ASCII码。由于用七位编码来表示一个符号,所以该编码方案中共有128个符号(2 7 =128),其中包括32个控制字符和96个符号字符,编号从0000000B到1111111B。

ASCII字符编码表如表1-6所示,控制字符及其含义如表1-7所示。

表1-6 ASCII字符编码表

(续表)

表1-7 控制字符及其含义

国际上ASCII码有七位和八位两个版本,七位版本又称为标准ASCII码,八位版本又称为扩展ASCII码。标准ASCII码在计算机内部用一个字节(八位二进制数)存放一个七位ASCII码,最高位补0,可以表示128种不同的字符。扩展ASCII码用八位二进制数表示一个字符的编码,可以表示256种不同的字符,是标准ASCII码的两倍。

三、汉字编码

汉字编码是为了在计算机中存储和输出汉字而设计的一种编码形式。汉字信息处理系统一般包括编码、输入、存储、编辑和输出,其中编码是最为关键的一个环节。20世纪80年代以前,我国计算机的应用主要局限于科学研究,后来随着计算机在我国的逐渐普及和在各个领域的广泛使用,如何在计算机上使用汉字就成了当时最为紧迫的研究课题。计算机工作者在这方面的努力取得了一系列惊人的成果。根据应用目的的不同,汉字编码分为国标码、机内码、输入码和字形码。

(一)国标码

计算机内部处理的信息都是用二进制代码表示的,汉字也不例外。而二进制代码使用起来是不方便的,因此需要采用信息交换码。中国国家标准总局于1980年发布了中华人民共和国国家标准《信息交换用汉字编码字符集·基本集》(GB 2312—1980),即国标码。

《信息交换用汉字编码字符集·基本集》是一个简体中文字符集,由6763个常用汉字和682个全角的非汉字字符组成。其中,汉字根据使用的频率分为两级,一级汉字有3755个,二级汉字有3008个。由于字符数量庞大,该标准采用了二维矩阵编码法对所有字符进行编码。首先构造一个94行、94列的方阵,将每一行称为一个“区”,94行就有94个“区”,每区包含94个“位”。其中“区”的序号由01至94,“位”的序号也是从01至94,这样整个方阵中位置总数为8836(94×94)个。然后将所有字符依照一定的规律填写到方阵中,这样所有的字符在方阵中都有一个唯一的位置,这个位置可以用区号、位号合成表示,称为字符的区位码。

国标码是区位码的另一种表现形式。在这个94×94的方阵中,7445个图形字符中的每一个占一个位置后,还剩下1391个空位,这1391个位置空下来保留扩展备用。

例如,第一个汉字“啊”出现在第16区的第1位上,其区位码为1601。因为区位码同字符的位置是完全对应的,因此区位码同字符之间也是一一对应的。这样所有的字符都可通过其区位码转换为数字编码信息。GB 2312—1980中字符的排列分布情况如表1-8所示。

表1-8 GB 2312—1980中的字符编码分布表

(二)机内码

GB 2312—1980确定了字符在计算机中存储是以其区位码为基础的,其中汉字的区码和位码分别占一个存储单元,每个汉字占两个存储单元。其区码和位码的取值范围都是在1~94之间,这样的范围同西文ASCII码的存储方式相冲突。例如,汉字“镝”在GB 2312—1980中的区位码为7965,即79区65位,其两字节表示形式为“79,65”(4FH,41H);而两个西文字符“O”“A”的存储码也是“4FH,41H”。这种冲突将导致在解释编码时无法判断到底表示的是一个汉字还是两个西文字符。

为避免同西文的存储发生冲突,GB 2312—1980中通过将原来的每个字节第8位设置为1,同西文加以区别。如果第8位为0,则表示西文字符,否则表示GB 2312—1980中的字符。实际存储时,采用了将区位码的每个字节分别加上A0H(160)的方法转换为存储码。例如,汉字“啊”的区位码为1601,其存储码为B0A1H,转换过程如表1-9所示。

表1-9 转换关系

GB 2312—1980编码用两个字节表示一个汉字,所以理论上最多可以表示65536(256×256)个汉字。但这种编码方式也仅仅在中国行得通,如果网页使用的是GB 2312—1980编码,那么很多外国人在浏览这类网页时就可能无法正常显示,因为其浏览器不支持GB 2312—1980编码。当然,中国人在浏览外国网页(如日文网页)时,也会出现乱码或无法打开的情况,因为所使用的浏览器没有安装日文的编码表。

(三)输入码

区位码和国标码都不利于输入汉字。为方便汉字的输入而制定的汉字编码称为汉字输入码。汉字输入码属于外码。汉字输入码种类较多,选择不同的输入码方案,则输入的方法及按键次数、输入速度均有所不同。综合起来,汉字输入码可分为流水码、拼音码、字形码和音形码几大类。流水码是按汉字的排列顺序形成的编码,优点是没有重码,但规律性不强,不容易记忆,如电报码、区位码等。拼音码是按汉字的读音形成的编码,将汉字拼音作为其代码,简单、易学,但重码较多、影响输入速度,如全拼、简拼、双拼等。字形码是按汉字的字形形成的编码,重码少、便于记忆、输入速度较快,通过简单学习便可掌握,因此得到了普及,如五笔字形码、郑码等。音形码是拼音码和字形码的结合体,兼容了两者的特点,如极点五笔输入法。输入码在计算机中必须转换成机内码才能进行存储和处理。

(四)字形码

字形码是汉字字库中存储的汉字字形的数字化信息,用于汉字的显示和打印。目前汉字信息处理系统产生汉字的方式大多是数字式的,即以点阵的方式形成汉字。一个汉字方块中行数和列数越多,描绘的汉字就越清晰、存储该汉字占的空间也就越大。例如,一个16×16的汉字点阵要占用32(16×16÷8=32)个字节存储空间。通用的汉字字形点阵分以下3种:简易型16×16点阵、普通型24×24点阵和提高型32×32点阵。

(五)各种汉字代码之间的关系

计算机处理汉字的过程就是汉字的各种代码转换的过程。图1-29表示的就是各种代码间的关系。

图1-29 各种代码间的关系

输入码通过汉字输入系统利用汉字输入字典转换成内码。在计算机内部及向硬盘、U盘等存储设备存储汉字信息都是以内码的形式进行的。在汉字的通信过程中,处理机将汉字转换成便于通信用的交换码以实现通信。最后,在汉字的显示和打印过程中,处理机将内码转换成地址码,利用地址码在汉字字模库中找到相应的汉字字形码,这样就可以实现汉字的打印和显示输出了。

四、字符集
(一)GB 2312—1980字符集

GB 2312—1980字符集收入6763个汉字、682个符号,总计7445个字符。这是中国普遍使用的简体字字符集。楷体-GB 2312、仿宋-GB 2312、华文行楷等市面上绝大多数字体支持显示这个字符集。该字符集也是大多数输入法所采用的字符集。市面上绝大多数所谓的繁体字体,其实采用的是GB 2312—1980字符集简体字的编码,用字体显示为繁体字,而不是直接用GBK字符集中繁体字的编码,错误百出。

(二)Big-5字符集

Big-5字符集又称大五码,是台湾地区繁体字的字符集,收入13060个繁体汉字、808个符号,总计13868个字符,普遍使用于台湾、香港等地区。台湾教育主管部门标准宋体、楷体等港台大多数字体支持显示这个字符集。Big-5字符集与GB 2312—1980字符集的编码不兼容,字符在不同的操作系统中便产生乱码。文本文字的简体与繁体(文字及编码)之间的转换,可用BabelPad、TextPro或ConvertZ之类的转码软件来解决。

(三)GBK字符集

GBK字符集,即国家标准扩展字符集,兼容GB 2312—1980字符集,包含Big-5字符集的繁体字,但不兼容Big-5字符集编码,收入21003个汉字、882个符号,总计21885个字符,包括了中日韩(CJK)统一汉字20902个、扩展A集(CJK Ext-A)中的汉字52个。例如“龑”字,其GBK编码为FD8CH,后来人们又扩展了简体字“”,其GBK编码为FE9FH,Windows 7.0简体中文版就带有支持这两个字的GBK.txt文件。宋体、隶书、黑体、幼圆、华文中宋、华文细黑、华文楷体、标楷体(DFKai-SB)、Arial Unicode MS、MingLiU、PMingLiU等字体支持显示这个字符集。

(四)GB 18030—2000字符集

GB 18030—2000字符集包含GBK字符集和CJK Ext-A全部6582个汉字,共计27533个汉字。宋体-18030、方正楷体(FZKai-Z03)、书同文楷体(MS Song)、香港华康标准宋体(DFSongStd)、香港华康标准楷体、CERG Chinese Font、韩国New Gulim,以及微软Windows Vista操作系统提供的宋体、黑体、楷体、仿宋等字体也支持显示这个字符集。

(五)方正超大字符集

方正超大字符集包含GB 18030—2000字符集、CJK Ext-B中的36862个汉字,共计64395个汉字。宋体-方正超大字符集字体支持显示这个字符集。Microsoft Office XP或2003简体中文版就自带有这个字体。Windows 2000操作系统需安装超大字符集支持包“Surrogate更新”。

(六)GB 18030—2005字符集

GB 18030—2005字符集在GB 18030—2000的基础上,增加了CJK Ext-B的36862个汉字,以及其他字符集的一些汉字,共计70244个汉字。

(七)ISO/IEC 10646/Unicode字符集

这是全球可以共享的编码字符集,两者相互兼容,涵盖了世界上主要文字的字符,其中包括简繁体汉字,计有:CJK统一汉字编码20902个、CJK Ext-A编码6582个、CJK Ext-B编码36862个、CJK Ext-C编码4160个、CJK Ext-D编码222个,共计68728个汉字。SimSun-ExtB(宋体)、MingLiU-ExtB(细明体)能显示CJK Ext-B中的全部汉字。UniFonts 6.0可以显示Unicode中的全部CJK编码的字符,可用海峰五笔、新概念五笔、仓颉输入法世纪版、新版的微软新注音、仓颉输入法6.0版(单码功能)等输入法录入。

(八)汉字构形数据库2.3版

汉字构形数据库2.3版内含楷书字形60082个、小篆11100个、楚系简帛文字2627个、金文3459个、甲骨文177个、异体字12768组。用户可以安装该程序,也可以将其解压后使用其中的字体文件,对于整理某些古代文献十分有用。

如果超出了输入法所支持的字符集,就不能录入计算机。有些人会利用私人造字区PUA的编码,造就一些字体。一些如果没有相应字体支持的字符,则显示为黑框、方框或空白。如果操作系统或应用软件不支持该字符集,则显示为问号(一个或两个)。网页上也存在同样的情况。

拓展阅读

2021年7月20日,河南省郑州市遭遇罕见强降水,引发暴雨洪灾。上海财经大学金融学院河南籍女大学生李某创新运用所学专业知识和互联网工具创建了一份“待救援人员信息”在线文档,与30余名志愿者组成“远程救援小分队”,迅速搜集、整理群众求救信息,让救援队伍准确对接救助。这份“救命文档”在短短24小时内被无数自救群众更新了270版,访问量超过250万次。

8月16日,这位年仅22岁的大学生入围“2021感动上海年度人物候选名单”,她也是唯一一位入围的大学生。对于人们的褒奖,她这样说:“我们享受着国家给予的丰富的教育机会,有着相比于过去更优越的物质和精神生活,我们处在一个科技发达的年代,更要心怀感激,运用自己过硬的专业知识去做有意义的事情。”和平年代,灾难来临,一方有难,八方支援。少年强则中国强,每一代的年轻人都会成长为社会的栋梁,成为祖国的接班人。大家积极投身于志愿者工作不仅仅是心怀感恩,更是一种责任和担当。

能够运用自己所学知识,用自己的力量回馈家乡,也是一种幸福。“胡辣汤”有难,“热干面”“煎饼果子”都纷纷来支援,这是大爱。有了这种互帮互助的精神及社会各界的援助之手,希望永远都在。年轻人要有匡时救国的精神,在和平年代踏踏实实在岗位上勤恳努力,在灾难来临时也能贡献力量,为祖国的发展添砖加瓦。 fxSnkjZ4uzZJ3AKfeJWpDp6Mr1f6XZMvQfmM62rlL00+NAjD4XzuK/fgVv/sVoe4

点击中间区域
呼出菜单
上一章
目录
下一章
×