数制与编码
第一章 数制与编码(Number System and Codes)
www.zsMCU.com 2006-9-21 网络
一、数字的进制
1、十进制数(Decimal Number)
十进制数是日常生活中使用最广的计数制。组成十进制数的符号有0,1,2,3,4,5,6,7,8,9等共十个符号,我们称这些符号为数码。
在十进制中,每一位有0~9共十个数码,所以计数的基数为10。超过9就必须用多位数来表示。十进制数的运算遵循加法时:“逢十进一”,减法时:“借一当十”。 十进制数中,数码的位置不同,所表示的值就不相同。如:
式中,每个对应的数码有一个系数1000,100,10,1与之相对应,这个系数就叫做权或位权。
对于位一十进制数可表示为:
N 10=an -1×10n -1+a n -2×10n -2+…+a 1×101+a 0×100+a -1×10-1+a -2×10-2+…+a -m ×10-m
=
a i ×10i
式中:ai 为0~9中的位一数码;10为进制的基数;10的i 次为第i 位的权;m,n 为正整数,n 为整数部分的位数,m 为小数部分的位数。 2、二进制数(Binary Number)
与十进制相似,二进制数也遵循两个规则: 仅有两个不同的数码,即0,1; 进/借位规则为:逢二进一, 借一当二。 对于任意一个二进制数可表示为:
N 2
=
b i ×2i
由于二进制数仅0,1两个数码,所以其运算规则比较简单,下现列出了二进制数进行加法和乘法的规则:
上表中式1+1=10中的红色为进位位。 3、十六进制(Hexadecimal Number)
二进制数在计算机系统中处理很方便,但当位数较多时,比较难记忆及书写,为了减小位数,通常将二进制数用十六进制表示。
十六进制是计算机系统中除二进制数之外使用较多的进制,其遵循的两个规则为: 其有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E ,F 等共十六个数码,其分别对应于十进制数的0~15;
十六进制数的加减法的进/借位规则为:借一当十六,逢十六进一。 十六进制数同二进制数及十进制数一样,也可以写成展开式的形式。
在数制使用时,常将各种数制用简码来表示:如十进制数用D 表示或省略;二进制用B 来表示; 十六进制数用H 来表示。
如:十制数123表示为:123D 或者123; 二进制数1011表示为:1011B;十六进制数3A4表示为:3A4H。
在计算机中除上面讲到的二进制、十进制、十六进制外,常常还会讲到八进制数,这里就不讨论了。
下表列出了十进制0~16对应的二进制数和十六进制数。
二、各种进制相互转换
1、其它进制转换为十进制
方法是:将其它进制按权位展开,然后各项相加,就得到相应的十进制数。
例1: N =(10110. 101)
B
=(?)
D
按权展开N =1*24+0*23+1*22+1*21+0*20+1*2-1+0*2-2+1*2-3
=16+4+2+0. 5+0. 125 =(22. 625)
D
2、 将十进制转换成其它进制
方法是: 它是分两部分进行的即整数部分和小数部分。
整数部分:(基数除法)
把我们要转换的数除以新的进制的基数,把余数作为新进制的最低位; 把上一次得的商在除以新的进制基数,把余数作为新进制的次低位; 继续上一步, 直到最后的商为零, 这时的余数就是新进制的最高位. 小数部分: (基数乘法)
把要转换数的小数部分乘以新进制的基数,把得到的整数部分作为新进制小数部分的最高位
把上一步得的小数部分再乘以新进制的基数,把整数部分作为新进制小数部分的次高位;
继续上一步,直到小数部分变成零为止。或者达到预定的要求也可以。 例2 : N=(68.125)D =(?)
O
整数部分 小数部分
(68. 125)
D
=(104. 1)
O
3、二进制与八进制、十六进制的相互转换
二进制转换为八进制、十六进制:它们之间满足23和24的关系,因此把要转换的二进制从低位到高位每3位或4位一组,高位不足时在有效位前面添“0”,然后把每组二进制数转换成八进制或十六进制即可
八进制、十六进制转换为二进制时,把上面的过程逆过来即可。 例3:N=(C1B )H =(?)B
(C1B )H =1100/0001/1011=([1**********]1)B
三、二进制的四则运算
二进制也可以进行四则运算,它的运算规则如下所示:
加运算 0+0=0,0+1=1,1+0=1,1+1=10 逢2进1 减运算 1-1=0,1-0=1,0-0=1,0-1=1(向高位借1当2) 乘运算 0*0=0,0*1=0,1*0=0,1*1=1
除运算 二进制只有两个数(0,1),因此它的商是1或0.
例1:求(1011101)B 与(0010011)B 之和
例2: 求(1101)B 与(0101)B 的乘积
通过例(1)我们再来介绍两个概念:半加和全加。
半加是最低位的加数和被加数相加时,不考虑低位向本位进位。
全加是加数和被加数相加时,我们还要考虑低位向本位的进位。
四、数的原码、反码及补码
1、数的表示形式
在生活中表示数的时候一般都是把正数前面加一个“+”,负数前面加一个“-”,但是在数字设备中,机器是不认识这些的,我们就把“+”用“0”表示,“-”用“1”表示。原码、反码和补码。这三种形式是怎样表示的呢?如下所示:
真值 原码
0X
反码 0X
补码 0X
例1:求+12和-12八位原码、反码、补码形式 它们的原码分别为
[+12]=00001100[-12]=100011 它们的反码分别为[+12]*=00001100
负数 -X
1X
(2n -1)
+X
2n +X [-12]*=(28-1)+(-1100)=11110011
它们的补码分别为[+12]**=00001100 [-12]**=28+(-1100)=11110100
正数 +X
2、原码、反码及补码的算术运算
因为这三种数码表示法的形成规则不同,所以算术运算方法也不相同。
原码:与我们的日常中算术运算相同。
反码:先转换为反码形式, 再进行加减运算。它的减法可以按A 行.
补码:先转换为补码形式,再进行加减运算, 其减法可以按A 3、溢出及补码运算中溢出的判断
溢出可以描述为运算结果大于数字设备的表示范围。这种现象应当作故障处理。 判断溢出是根据最高位的进位来判断的。
+[-B]补进行. +[-B]反的形式进
反
补
五、常用编码
1、BCD 编码
在数字系统中,各种数据要转换为二进制代码才能进行处理,而人们习惯于使用十进制数,所以在数字系统的输入输出中仍采用十进制数,这样就产生了用四位二进制数表示一位十进制数的方法,这种用于表示十进制数的二进制代码称为二-十进制代码(Binary Coded Decimal),简称为BCD 码。它具有二进制数的形式以满足数字系统的要求,又具有十进制的特点(只有十种有效状态)。在某些情况下,计算机也可以对这种形式的数直接进行运算。常见的BCD 码表示有以下几种。
∙ 8421BCD 编码
这是一种使用最广的BCD 码,是一种有权码,其各位的权分别是(从最有效高位开始到最低有效位)8,4,2,1。
例 写出十进数563.97D 对应的8421BCD 码。
563.97D =0101 0110 0011 . 1001 01118421BCD
例 写出8421BCD 码1101001.010118421BCD 对应的十进制数。 1101001.010118421BCD =0110 1001 . 0101 10008421BCD =69.58D
在使用8421BCD 码时一定要注意其有效的编码仅十个,即:0000~1001。四位二进制数的其余六个编码1010,1011,1100,1101,1110,1111不是有效编码。
∙ 2421BCD 编码
2421BCD 码也是一种有权码,其从高位到低位的权分别为2,4,2,1,其也可以用四位二进制数来表示一位十进制数。其编码规则如下表。 2、余3码
余3码也是一种BCD 码,但它是无权码,但由于每一个码对应的8421BCD 码之间相差3, 故称为余3码,其一般使用较少,故正须作一般性了解,具体的编码如下表。
常见BCD 编码表
3、格雷反射码(循环码)
格雷码是一种无权码,其特点是任意两个相邻的码之间只有一个数不同。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。
4、奇偶校验码
在数据的存取、运算和传送过程中,难免会发生错误,把“1”错成“0”或把“0”错成“1”。奇偶校验码是一种能检验这种错误的代码。它分为两部分;信息位和奇偶校验位。 有奇数个“1”称为奇校验,有偶数个“1”则称为偶校验。