文档库 最新最全的文档下载
当前位置:文档库 › 数制与编码

数制与编码

一、常见的数制

1、数制:指用一组固定的符号和统一的规则来表示数的方法,也称计数制。

2、进位计数制:按进位的方法进行计数,如十进制、二进制等,日常生活和计算机中均采用进位计数制。进位计数制包括三个要素:数位、基数、位权

①、数位:指数中各数字的位置;

②、基数:指进位计数制中数字的个数。

③、位权:某数位上数字所代表的数值大小等于该数字乘以一个固定的数,这个固定的数就是这个数位的位权。

例如:常见进位计数制的三要素基本情况如下…

3、常见的数制及在计算机中的应用

二、不同进位数制之间的转换

1、十进制整数与N进制整数之间的转换

除N取余法

十进制整数──────→

N进制整数←──────

按权展开法

例如:十进制整数──→N进制整数

说明:①、计算时,按被除数、除数、商、余数的顺序书写;

②、除到商为0才能结束;

③、最后一个余数到第一个余数分别对应结果的最高位到最低位;

【小结】除N取余法,就是用要转换的十进制数去除以N,把余数写在整除商的旁边,并用得到的商继续去除以N,如此循环,直到商为0,最后把所有的余数从最后一个写到第一个,就得到了对应的N进制整数。

例如:N进制整数──→十进制整数

说明:展开时从低位向高位进行,有利于权值的正确性;

【小结】按权展开法,就是用要转换的N进制数各数位上的数字乘以对应的位权值,然后按十进制的加法把所有的积加起来,就得到了相应的十进制数。

2、十进制纯小数与N进制纯小数之间的转换

乘N取整法

十进制纯小数─────→N进制纯小数

←─────

按权展开法

例如:十进制纯小数──→N进制纯小数

说明:并不是所有的十进制小数都能转换成精确的N进制小数;

【小结】乘N取整法,就是用要转换的十进制纯小数乘以N,然后将积的整数部分提出来,并用余下的纯小数再乘以N,如此循环,直到余下的纯小数为0。

例如:N进制纯小数──→十进制纯小数

说明:小数部分的按权展开法基本同前,只是从高位向低位展开而矣。

3、二、八、十六进制之间的转换

三个二进制位对应一个八进制位

二进制数───────────────→八进制数

←───────────────

一个八进制位对应三个二进制位

对应关系如下:

例如:(-110011.11011)2=( )8

二进制数-110011·110110

←─────→

↓↓↓↓↓↓

八进制数- 6 3 · 6 6

说明:整数部分从低位往高位分组,不足三位在高位补0;

小数部分从高位往低位分组,不足三位在低位补0;

又如:(2156.354)8=( )2

八进制数2156·354

↓↓↓↓↓↓↓↓

二进制数010 001 101 110 ·011 101 110

四个二进制位对应一个十六进制位

二进制数───────────────→

十六进制数←───────────────

一个十六进制位对应四个二进制位

对应关系如下:

例如:(-1010011.110101)2=( )8

二进制数-01010011·11010100

←────────→

↓↓↓↓↓↓

十六进制数- 5 3 · D 4

说明:整数部分从低位往高位分组,不足四位在高位补0;

小数部分从高位往低位分组,不足四位在低位补0;

又如:(1E6.3F4)8=( )2

十六进制数1E6·3F4

↓↓↓↓↓↓↓

二进制数0001 1110 0110 ·0011 1111 0100

【数制转换总结】

①、如果要转换的数既有整数又有小数,可分别转换,然后将各自得到的结果加起来就行了;

②、要比较几个数的大小时,应将这些数转换成同一数制的形式;

③、我们利用“M─→十─→N”可实现任何数制之间的转换;

④、二、八、十六进制之间的转换非常实用;

⑤、小数的转换在一级中为了解内容;

三、二进制算术运算和逻辑运算

1、二进制的算术运算

二进制数的算术运算非常简单,它的基本运算是加法。在计算机中,引入补码表示后,加上一些控制逻辑,利用加法就可以实现二进制的减法、乘法和除法运算。

(1)二进制的加法运算

二进制数的加法运算法则只有四条:0+0=0 0+1=1 1+0=1 1+1=10(向高位进位)

例:计算1101+1011的和

由算式可知,两个二进制数相加时,每一位最多有三个数:本位被加数、加数和来自低位的进位数。按照加法运算法则可得到本位加法的和及

向高位的进位。

(2)二进制数的减法运算

二进制数的减法运算法则也只有四条: 0-0=0 0-1=1(向高位借位) 1-0=1 1-1=0

例:计算11000011 00101101的差

由算式知,两个二进制数相减时,每一位最多有三个数:本位被减数、减数和向高位的借位数。按照减法运算法则可得到本位相减的差数和向高位的借位。

(3)二进制数的乘法运算

二进制数的乘法运算法则也只有四条: 0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1

例:计算1110×1101的积

由算式可知,两个二进制数相乘,若相应位乘数为1,则部份积就是被乘数;若相应位乘数为0,则部份积就是全0。部份积的个数等于乘数的位数。以上这种用位移累加的方法计算两个二进制数的乘积,看起来比传统乘法繁琐,但它却为计算机所接受。累加器的功能是执行加法运算并保存其结果,它是运算器的重要组成部分。

(4)二进制数的除法运算

二进制数的除法运算法则也只有四条:0÷0 = 00÷1 = 01÷0 = 0 (无意义) 1÷1 = 1

例:计算100110÷110的商和余数。

由算式可知,(100110)2÷(110)2得商(110)2,余数(10)2。但在计算机中实现上述除法过程,无法依靠观察判断每一步是否“够减”,需进行修改,通常采用的有“恢复余数法”和“不恢复余数法”,这里就不作介绍了。

2、二进制数的逻辑运算

计算机所以具有很强的数据处理能力,是由于在计算机里装满了处理数据所用的电路。这些电路都是以各种各样的逻辑为基础而构成的简单电路经过巧妙组合而成的。

逻辑变量之间的运算称为逻辑运算,它是逻辑代数的研究内容。在逻辑代数里,表示"真"与"假"、"是"与"否"、"有"与"无"这种具有逻辑属性的变量称为逻辑变量,像普通代数一样,逻辑变量可以用A,B,C,……或X,Y,Z……来表示。对二进制数的1和0赋以逻辑含义,例如用1表示真,用0表示假,这样将二进制数与逻辑取值对应起来。由此可见,逻辑运算是以二进制数为基础的。值得指出的是,普通代数的变量可以有各种各样的取值,而逻辑变量的取值只有两种:真和假,也就是1和0。

逻辑运算包括三种基本运算:逻辑加法(又称"或"运算)、逻辑乘法(又称"与"运算)和逻辑否定(又称"非"运算)。此外,还有异或运算和符合运算,等等。计算机的逻辑运算是按位进行的,不像算术运算那样有进位或借位的联系。

(1)逻辑加法(或运算)

逻辑加法通常用符号"+"或"∨"来表示。对于逻辑变量A,B和C,它们的逻辑加运算关系为: A+B=C A∨B=C以上两式等价,都读作A或B 等于C。若逻辑变量取不同的值,则逻辑加运算规则如下:

0+0=0 0+1=1 1+0=1 1+1=1 或0∨0=0 0∨1=1 1∨0=1 1∨1=1

由上面式子可见,只要逻辑变量A或B中有一个为1,或两个都为1,则逻辑加的结果就为1;只有A和B同时为0时,C才等于0。

(2)逻辑乘法(与运算)

逻辑乘法通常用符号"*"或"∧"或"·"来表示。对于逻辑变量A,B和C,它们的逻辑乘法运算关系为:A*B=C A∧B=C或A·B=C以上各式等价,都读作A与B等于C。若逻辑变量取不同的值,则逻辑乘法运算规则如下:

0*0=0 0∧0=00·0=0

0*1=0 0∧1=00·1=0

1*0=0 1∧0=01·0=0

1*1=1 1∧1=11·1=1

不难看出,逻辑乘法有"与"的意义,它表示仅当A和B同时为1时,其逻辑乘积C才等于1,其它情况C都等于0。

(3)逻辑否定(非运算)

逻辑非通常用在逻辑变量上方加一横线来表示,对于逻辑变量A和C,其逻辑否定运算规则为:A=C

由上式看出,逻辑变量A取值0时,其否定C等于1;反之,A取值1时,其否定C等于0。

非逻辑的运算规则为:0=1,读作非0等于1;1=0,读作非1等于0

四、计算机中信息的编码

在计算机中,各种信息都是以二进制编码的形式存在的;也就是说,不管是文字、图形、声音、动画,还是电影等各种信息,在计算机中都是以0和1组成的二进制代码表示的;计算机之所以能区别这些信息的不同,是因为它们采用的编码规则不同。比如:同样是文字,英文字母与汉字的编码规则就不同,英文字母用的是单字节的ASCII码,汉字采用的是双字节的汉字内码;但随着需求的变化,这两种编码有被统一的UNICODE码(由Unicode 协会开发的能表示几乎世界上所有书写语言的字符编码标准)所取代的趋势;当然图形、声音等的编码就更复杂多样了。这也就告诉我们,信息在计算机中的二进制编码是一个不断发展的、高深的、跨学科的知识领域。

1、字符(英文,包括字母、数字、标点、运算符等)编码

字符的编码采用国际通用的ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),每个ASCII码以1个字节(Byte)储存,从0到数字127代表不同的常用符号,例如大写A的ASCII码是65,小写a则是97。由于ASCII码只用了字节的七个位,最高位并不使用,所以后来又将最高的一个位也编入这套编码码中,成为八个位的延伸ASCII(ExtendedASCII)码,这套内码加上了许多外文和表格等特殊符号,成为目前常用的编码。基本的ASCII字符集共有128个字符,其中有96个可打印字符,包括常用的字母、数字、标点符号等,另外还有32个控制字符。标准ASCII码使用7个二进位对字符进行编码,对应的ISO标准为ISO646标准。下表展示了基本ASCII字符集及其编码:

字母和数字的ASCII码的记忆是非常简单的。我们只要记住了一个字母或数字的ASCII码(例如记住A为65,0的ASCII码为48),知道相应的大小写字母之间差32,就可以推算出其余字母、数字的ASCII码。

虽然标准ASCII码是7位编码,但由于计算机基本处理单位为字节(1byte = 8bit),所以一般仍以一个字节来存放一个ASCII字符。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为0(在数据传输时可用作奇偶校验位)。由于标准ASCII字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了ISO2022标准,它规定了在保持与ISO646兼容的前提下将ASCII字符集扩充为8位代码的统一方法。ISO陆续制定了一批适用于不同地区的扩充ASCII字符集,每种扩充ASCII字符集分别可以扩充128个字符,这些扩充字符的编码均为高位为1的8位代码(即十进制数128~255),称为扩展ASCII码。下表展示的是最流行的一套扩展ASCII字符集和编码:

2、汉字的编码

(1)汉字内码

汉字信息在计算机内部也是以二进制方式存放。由于汉字数量多,用一个字节的128种状态不能全部表示出来,因此在1980年我国颁布的《信息交换用汉字编码字符集——基本集》,即国家标准GB2312-80方案中规定用两个字节的十六位二进制表示一个汉字,每个字节都只使用低7位(与ASCII码相同),即有128×128=16384种状态。由于ASCII码的34个控制代码在汉字系统中也要使用,为不致发生冲突,不能作为汉字编码,128除去34只剩94种,所以汉字编码表的大小是94×94=8836,用以表示国标码规定的7445个汉字和图形符号。

每个汉字或图形符号分别用两位的十进制区码(行码)和两位的十进制位码(列码)表示,不足的地方补0,组合起来就是区位码。把区位码按一定的规则转换成的二进制代码叫做信息交换码(简称国标码)。国标码共有汉字6763个(一级汉字,是最常用的汉字,按汉语拼音字母顺序排列,共3755个;二级汉字,属于次常用汉字,按偏旁部首的笔划顺序排列,共3008个),数字、字母、符号等682个,共7445个。

由于国标码不能直接存储在计算机内,为方便计算机内部处理和存储汉字,又区别于ASCII码,将国标码中的每个字节在最高位改设为1,这样就形成了在计算机内部用来进行汉字的存储、运算的编码叫机内码(或汉字内码,或内码)。内码既与国标码有简单的对应关系,易于转换,又与ASCII码有明显的区别,且有统一的标准(内码是惟一的)。

(2)汉字外码

无论是区位码或国标码都不利于输入汉字,为方便汉字的输入而制定的汉字编码,称为汉字输入码。汉字输入码属于外码。不同的输入方法,形成了不同的汉字外码。常见的输入法有以下几类:

按汉字的排列顺序形成的编码(流水码):如区位码;

按汉字的读音形成的编码(音码):如全拼、简拼、双拼等;

按汉字的字形形成的编码(形码):如五笔字型、郑码等;

按汉字的音、形结合形成的编码(音形码):如自然码、智能ABC。

输入码在计算机中必须转换成机内码,才能进行存储和处理。

(3)汉字字形码

为了将汉字在显示器或打印机上输出,把汉字按图形符号设计成点阵图,就得到了相应的点阵代码(字形码)。

全部汉字字码的集合叫汉字字库。汉字库可分为软字库和硬字库。软字库以文件的形式存放在硬盘上,现多用这种方式,硬字库则将字库固化在一个单独的存储芯片中,再和其它必要的器件组成接口卡,插接在计算机上,通常称为汉卡。

用于显示的字库叫显示字库。显示一个汉字一般采用16×16点阵或24×24点阵或48×48点阵。已知汉字点阵的大小,可以计算出存储一个汉字所需占用的字节空间。例:用16×16点阵表示一个汉字,就是将每个汉字用16行,每行16个点表示,一个点需要1位二进制代码,16个点需用16位二进制代码(即2个字节),共16行,所以需要16行×2字节/行=32字节,即16×16点阵表示一个汉字,字形码需用32字节。

即:字节数=点阵行数×点阵列数/8

用于打印的字库叫打印字库,其中的汉字比显示字库多,而且工作时也不像显示字库需调入内存。

可以这样理解,为在计算机内表示汉字而统一的编码方式形成汉字编码叫内码(如国标码),内码是惟一的。为方便汉字输入而形成的汉字编码为输入码,属于汉字的外码,输入码因编码方式不同而不同,是多种多样的。为显示和打印输出汉字而形成的汉字编码为字形码,计算机通过汉字内码在字模库中找出汉字的字形码,实现其转换。

例1:已知汉字"春"的国标码为343AH,求其机内码?

机内码=国标码+8080H=343AH+8080H=B4BAH

例2:用24×24点阵来表示一个汉字(一点为一个二进制位),则2000个汉字需要多少KB容量?

(24×24/8)×2000/1024=140.7KB≈141KB

五、数的编码

1.数的原码、补码和反码表示

(1)机器数与真值

在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位符号位,并用0表示正数符号,用1表示负数符号。这样,机器中的数值和符号全“数码化”了。为简化机器中数据的运算操作,人们采用了原码、补码、反码及移码等几种方法对数值位和符号位统一进行编码。为区别起见,我们将数在机器中的这些编码表示称为机器数(如:10000001),而将原来一般书写表示的数称为机器数的真值(如:-0000001)。

(2)原码表示法

原码表示法是一种简单的机器数表示法,即符号和数值表示法,设x为真值,[x]原为机器数表示。

例:设 x= 1100110,则[x]原=01100110

x=-1100111,则[x]原=11100111

(3)反码表示法

正数的反码就是真值本身;负数的反码,只须对符号位以外各位按位“求反”(0变1,1变0)即可。

例:设 x= 1100110,则[x]反=01100110

x=-1100111,则[x]反=10011000

(4)补码表示法

负数用补码表示时,可以把减法转化成加法。正数的补码就是真值本身;负数的补码是符号位为1,数值各位取反(0变为1、1变为0),最低位加1。

例:设 x= 1100110,则[x]补=01100110

x=-1100111,则[x]补=10011001

从上面关于原码、反码、补码的定义可知:一个正数的原码、反码、补码的表示形式相同,符号位为0,数值位是真值本身;一个负数的原码、反码、补码的符号位都为1,数值位原码是真值本身,反码是各位取反,补码是各位取反,最低位加1。真值0的原码和反码表示不唯一,而补码表示是唯一的,即

[+0]原=000...0,[-0]原=100 0

[+0]反=000...0,[-0]反=111 (1)

[+0]补=[-0]补=000 0

注:不同编码表示的整数的范围是这样这样的(以N位二进制位)

原码:0--2n-1(无符号) -2n-1-1--2n-1-1(有符号)

反码:-2n-1-1--2n-1-1(不存在无符号的情况)

补码:-2n-1--2n-1-1(不存在无符号的情况)

大家很明显看出,补码表示的范围最大。现以八位二进制位为例说明如下:

原码: 00000000-11111111即0-255(无符号)11111111-01111111即-127-+127(有符号) 反码:10000000-01111111即-127-+127(因为10000000的值为-127,11111111的值为-0) 补吗:10000000-01111111即-128-+127(因为10000000的值为-128,11111111的值为-1) 如果没说具体编码形式,则计算机中N位二进制无符号数的范围是0--2n-1;有符号数的范围是-2n-1--2n-1-1

2.数的定点表示和浮点表示

在计算机中小数点一般有两种表示法:一种是小数点固定在某一位置的定点表示法;另一种是小数点的位置可任意移动的浮点表示法。相应于这两种表示的计算机分别称为定点计算机和浮点计算机。

(1)定点表示法

机器中所有数的小数点位置是固定不变的,因而小数点就不必使用记号表示出来。实际上,小数点可固定在任意一个位置上。

(2)浮点表示法

在数的定点表示法中,由于数的表示范围较窄常常不能满足各种数值问题的需要。为了扩大数的表示范围,方便用户使用,有些计算机常采用浮点表示法。表示一个浮点数,要用两部分:尾数和阶码。尾数用以表示数的有效数值;阶码用以表示小数点在该数中的位置。

由于二进制数,尾数左移一位(即小数点右移一位),阶码加1;尾数右移一位(即小数点左移一位),阶码减1。由此知浮点数表示不是唯一的。为了使浮点数有一个唯一的标准表示形式,规定非0浮点数的尾数最高位必须是非0的有效位,这称为浮点的规格化形式。当一个浮点数,其尾数为0(不论阶码为何值)或阶码等于最小数时(不论尾数为何值),计算机常规定:把该数看作0,称作“机器零”。总之,阶码确定数的表示范围,尾数确定数的精确度。

由上可见,数的浮点表示的范围要比定点表示大得多。但也不是无限的,当一个数超出浮点数所能表示的范围时,机器就无法正确表示出来,这称为“溢出”。当一个数的阶码大于机器所能表示的最大阶码时,称“上溢”;当一个数的阶码小于机器所能表示的最小阶码时,称为“下溢”。上溢时机器不能继续运行,应转入“溢出中断”处理;下溢时则当作“机器0”处理,机器可继续运算。

相关文档