分类: C/C++
2010-05-31 00:07:10
计算机可以在屏幕上显示字符,这些字符可以是字母,标点符号,数字,汉字等。计算机只认识二进制数,所以也只能用二进制数来表示每个显示和输出的字符。为了使计算机的数据能够共享和传递,必须对字符进行相应的二进制编码。
目前常用的编码有如下几种:BCD码、ASCII码、汉字编码等。
一、BCD码
1、什么是BCD码?
用四位二进制数码来表示一位十进制数,这种编码称为BCD码(也叫
十进制数位 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
BCD码 |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
[例1]把十进制数7209化成BCD码。
解:7209的BCD码为:0111 0010 0000 1001
练习:求十进制数4851的BCD码。
解:4851的BCD码为:0100 1000 0101 0001
2、对于BCD码的几点说明:
(1)考虑人们使用习惯,通常在计算机输入输出过程中还是采用十进制,然后由机器转换成二进制。BCD码的形式非常适于人类的这种习惯。
(2)BCD码虽然也用四位二进制数编码来表示每位十进制数用,但它没有把十进制数的值转换成真正的二进制值,不能按权展开求值。
如:十进制数28转换成二进制数为:11100
十进制数28转换成BCD码为:00101000
所以,BCD码与二进制之间转换是不能直接进行的,要先转换成十进制,再转换为二进制,因为BCD码实质上是十进制数,而形式上为二进制数,在转换上又与二进制数十六进制数之间的转换相似。所以在学习时要注意不要混淆,加以区别。
练习:填表
十进制数 |
18 |
45 |
112 |
51 |
42 |
82 |
51 |
二进制数 |
10010 |
101101 |
1110000 |
110011 |
101010 |
1011100 |
110011 |
BCD码 |
00011000 |
01000101 |
000100010010 |
01010001 |
01000010 |
10000010 |
01010001 |
二、ASCII码
1、什么叫ASCII码?
ASCII码是美国标准信息交换码的缩写,它是目前国际上在计算机中用二进制数表示字母、数字、符号以及控制符号最常用的编码。
(1)常用字符有128个,编码从0到127(0000000―1111111)。
(2)控制字符:0-31、127,共33个,不可显示;
(3)普通字符:95个,包括10个阿拉伯数字、52个英文大小写字母、33个运算符。
(4)每个字符占一个字节,最高位为0,后面跟7位二进制数。
2、常见ASCII码的大小规则,0-9<A-Z<a-z:
(1)数字比字母要小。如“
(2)数字0比数字9要小,并按0到9顺序递增。如“
(3)字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z”
(4)同个字母的大写字母比小写字母要小32。如“A”<“a”
(5)记住几个常见字母的ASCII码大小:
“空格”为32;“0”为48;“A”为65;“a”为97。
3、常用ASCII码表如下:
字符 |
范围 | |
十六进制 |
十进制 | |
空格 |
20H |
32 |
0~9 |
30H~39H |
48~57 |
A~Z |
41H~5AH |
65~90 |
a~z |
61H~7AH |
97~122 |
[例2]已知字母“B”的ASCII码为十进制数66,那么字母“E”的ASCII码为二进制数多少?
解:字母“E”的ASCII码为十进制数69(66+3),转换成二进制数为1000101
[例3]已知字母“a”的ASCII码为十六进制数61,那么字母“h”的ASCII码为二进制数多少?
解:字母“h”的ASCII码为十六进制数68(61+7),转换成二进制数为01101000
三、汉字编码
1、汉字编码分类
汉字在不同的处理阶段有不同的编码。
(1)汉字的输入:输入码à国标码
(2)汉字的机内表示:机内码
(3)汉字的输出:字形码(输出码:汉字点阵字库)
输入码 国标码 机内码 输出码
2、汉字的机内表示:机内码
计算机在信息处理时表示汉字的编码,称作机内码。
现在我国都用国标码(GB2312)作为机内码。
GB2312-80规定了:
(1)一个汉字由两个字节组成,为了与ASCII码区别,最高位均为“1”。
(2)汉字6763个:一级汉字3755个,按汉字拼音字母顺序排列;二级汉字3008个,按部首笔画汉字排列。
(3)汉字分区:94行(区),94列(位)(区位码)
3、汉字的机内表示:区位码、国际码和机内码:
(1)区位码
计算机在信息处理时表示汉字的编码应该规定统一的编码,我国制定了汉字交换的统一标准——GB2312-80,我们简称为区位码。
GB2312-80国标字符集将汉字编码分成94区与94位,就是区位码。共收集了7445个图形字符,其中一般符号、数字、拉丁字母、希腊字母、汉语拼音等709个,汉字字符分为两级,一级汉字3755个,二级汉字为3008个。该标准按区位码从小到大排列如下:
第1区 图形、符号区
第2区 各类数字区
第3区 符号、字母
第4区 日文的平假名
第5区 日文的片假名
第6区 希腊字母
第7区 俄文字母
第8区 拼音字母
第9区 制表符
第16——55区(常用字) 一级汉字 按拼音排列
第56——87区(非常用字)二级字库 按部首排列
第88――94区 自定义汉字
①GB2312-80标准中共有汉字6763个:
一级汉字3755个,按汉字拼音字母顺序排列;
二级汉字3008个,按部首 笔画汉字排列。
②GB2312-80标准采用区位码,将汉字编码分成94区与94位。
练习:一级汉字的第一个汉字的区位码是多少?1601
二级汉字的第一个汉字的区位码是多少?5601
③知识链接:汉字标准不仅有GB2312-80一种
在台湾和香港使用的汉字字符集是 BIG5(繁体中文),共有汉字13053个。
汉字扩展标准GBK字符集,GBK字符集有20902个汉字字符
(2)国标码:汉字信息交换的代码,也称交换码。
区位码与国标码的换算:国标码=十六进制的区位码+2020H
(3)机内码:计算机系统内部标识汉字的编码。
一个汉字由两个字节组成,为了与ASCII码区别,最高位均为“1”。
国标码和机内码的换算:机内码=十六进制的国际码+8080H
[例1]“大”字的区位码为2083,求该字的国标码和机内码。
分析方法步骤:
(1)区码和位码分别转换成十六进制数表示
(2)(区位码的十六进制表示)+2020H=国标码;
(3)国标码+8080H=机内码
解:1、该字的区号为20,位号为83
2、将区位号2083分别转换为十六进制表示为1453H
3、国标码=1453H+2020H=3473H
4、机内码=3473H+8080H=B
[练习]已知某字区位码为2054,请分别求出该字的国标码与机内码。
十六进制区位码:1436H
国标码:3456H
机内码:B4D6H
四、汉字的输入:汉字输入码(外码)
1、数字码(或流水码)
如:电报码、区位码、纵横码
优点:无重码,不仅能对汉字编码,还能对各种字母、数字符号进行编码。
缺点:是人为规定的编码,属于无理码,只能作为专业人员使用。
2、字音码
如:全拼、双拼、微软拼音
优点:简单易学。
缺点:汉字同音多,所以重码很多,输入汉字时要选字。
3、字形码
如:五笔字型、表形码、大众码、四角码
优点:不考虑字的读音,见字识码,一般重码率较低,经强化训练后可实现盲打。
缺点:拆字法没有统一的国家标准,拆字难,编码规则繁,记忆量大。
4、音形码
如:声形、自然码、钱码
优点:利用音码的易学性和形码可有效减少重码的优点。
缺点:既要考虑字音,又要考虑字形,比较麻烦。
五、汉字的输出:字形码(字库 Font)
1、点阵字形:16×16、24×24、48×48
每一个点在存储器中用一个二进制位(bit)存储,所以一个16×16点阵汉字需要32(16×16/8=32)个字节存储空间。
2、轮廓字形
字笔画的轮廓用一组直线和曲线勾画。记录的是这些几何形状之间的关系。
精度高。