1.2 数制与编码
1.2.1 二进制数和十六进制数
数制即计数进位制。人们习惯于用十进制数,但有些场合也用其他进制数,如时间计数时,分秒的进位用60,即六十进制。在数字电路和计算机中,通常采用二进制数和十六进制数。
1.十进制数(Decimal Number)
主要特点如下。
①基数是10。有10个数码(数符):0、1、2、3、4、5、6、7、8、9。
②进位规则是“逢十进一”。
所谓基数,是指计数制中所用到数码的个数。如十进制共有0~9十个数码,基数是10,进位规则是“逢十进一”。当基数为M时,便是“逢M进一”。在进位计数制中常用“基数”来区别不同的进位数。
十进制整数,其数值可表达为
[N]10中的下标10表示数N是十进制数,十进制数也可用[N]D表示。更多情况下,下标10或D可省略不标。
10i-1、10i-2、…、101、100称为十进制数各数位的权。
例如,1234=1×103+2×102+3×101+4×100
2.二进制数(Binary Number)
主要特点如下。
①基数是2。只有两个数码:0和1。
②进位规则是“逢二进一”。
二进制整数,其数值可表达为
[N]2中的下标2表示数N是二进制数,二进制数也可用N B表示,尾缀B一般不能省略。
2i-1、2i-2、…、21、20称为二进制数各数位的权。
例如,10101011 B=1×27+0×26+1×25+0×24+1×23+0×22+1×21+1×20=171
为什么要在数字电路和计算机中采用二进制数呢?
①二进制数只有两个数码0和1,可以代表两个不同的稳定状态,如灯泡的亮和暗、继电器的合和开、信号的有和无、电平的高和低、晶体管的饱和导通和截止。因此,可用电路来实现两种状态。
②二进制基本运算规则简单,操作方便。
但是二进制数也有其缺点,数值较大时,位数过多,不便于书写和识别。因此,在数字系统中又常用十六进制数来表示二进制数。
3.十六进制数(Hexadecimal Number)
主要特点如下。
①基数是16。有16个数码:0、1、…、9、A、B、C、D、E、F。其中A、B、C、D、E、F分别代表10、11、12、13、14、15。
②进位规则是“逢十六进一”。
十六进制整数,其数值可表达为
[N]16中的下标16表示数N是十六进制数,十六进制数也可用N H表示,尾缀H一般不能省略。
16i-1、16i-2、…、161、160称为十六进制数各位的权。
例如,AB H=10×161+11×160=160+11=171
十六进制数与二进制数相比,大大缩小了位数,缩短了字长。一个4位二进制数只需要用1位十六进制数表示,一个8位二进制数只需用两位十六进制数表示,转换极其方便,例如,上例中AB H=10101011 B=171。
十六进制数、二进制数、十进制数对应关系表如表1-1所示。
表1-1 十六进制数、二进制数和十进制数对应关系表
需要指出的是,除二进制数、十六进制数外,早期数字系统中还推出过八进制数,现早已淘汰不用。
1.2.2 不同进制数间相互转换
1.二进制数、十六进制数转换为十进制数
二进制数、十六进制数转换为十进制数只需按式(1-2)、式(1-3)展开相加即可。为了便于快速转换,读者应熟记二进制数和十六进制数部分常用位权(如表1-2所示),对进一步学习数字电路后续内容大有帮助。
2.十进制整数转换为二进制数
十进制整数转换为二进制数用“除2取余法”。即用2依次去除十进制整数及除后所得的商,直到商为0止,并依次记下除2时所得余数,第一个余数是转换成二进制数的最低位,最后一个余数是最高位。
表1⁃2 常用位权
【例1-1】将十进制数41转换为二进制数。
解:
因此,41=101001B
3.十进制整数转换为十六进制数
十进制整数转换为十六进制数用“除16取余法”,方法与“除2取余法”相同。
【例1⁃2】将十进制数8125转换为十六进制数。
解:
因此,8125=1FBD H
4.二进制数与十六进制数相互转换
前述4位二进制数与1位十六进制数有一一对应关系,如表1-1所示。相互转换时,只要用相应的数值代换即可。二进制数整数转换为十六进制数时,应从低位开始自右向左每4位一组,最后不足4位用零补足。
【例1⁃3】
【例1⁃4】
1.2.3 二进制数加减运算
1.二进制数加法运算
运算规则:①0+0=0
②0+1=1+0=1
③1+1=10,向高位进位1
运算方法:两个二进制数相加时,先将相同权位对齐,然后按运算规则从低到高逐位相加,若低位有进位,则必须同时加入。
【例1⁃5】计算10100101 B+11000011 B
解:
因此,10100101 B+11000011 B=101101000 B
2.二进制数减法运算
运算规则:①0-0=0
②1-0=1
③1-1=0
④0-1=1,向高位借位1
运算方法:两个二进制数相减时,先将相同权位对齐,然后按运算规则从低到高逐位相减。不够减时可向高位借位,借1当2。
【例1⁃6】计算10100101 B-11000011 B
解:
因此,10100101 B -11000011 B =11100010 B(借位1)
读者可能感到奇怪的是,二进制数减法怎么会出现差值比被减数和减数还要大的现象?在数字电路和计算机中,无符号二进制数减法可无条件向高位借位,不出现负数(二进制负数另有表达方法,不在本书讨论范围)。实际上该减法运算是110100101 B-11000011 B。
3.二进制数移位
二进制数移位可分为左移和右移。左移时,若低位移进位为0,相当于该二进制数乘2;右移时,若高位移进位为0,移出位作废,相当于该二进制数除以2。
例如,1010 B左移后变为10100 B,10100 B=1010 B×2;1010 B右移后变为0101 B,0101 B=1010 B/2。
1.2.4 BCD码(Binary Coded Decimal)
人们习惯上是用十进制数,而数字系统必须用二进制数分析处理,这就产生了二-十进制代码,也称为BCD码。BCD码种类较多,有8421码、2421码和余3码等,其中8421 BCD码最为常用。8421 BCD码用[N]8421BCD表示,常简化为[N]BCD。
1.编码方法
BCD码是十进制数,逢十进一,只是数符0~9用4位二进制码0000~1001表示而已。8421 BCD码每4位以内按二进制进位;4位与4位之间按十进制进位。其与十进制数之间的对应关系如表1-3所示。
但是4位二进制数可有16种状态,其中1010、1011、1100、1101、1110和1111六种状态舍去不用,且不允许出现,这6种数码称为非法码或冗余码。
2.转换关系
(1)BCD码与十进制数相互转换
由表1-3可知,十进制数与8421 BCD码转换十分简单,只要把数符0~9与0000~1001对应互换就行了。
【例1⁃7】
【例1⁃8】
(2)BCD码与二进制数相互转换
8421 BCD码与二进制数之间不能直接转换,通常需先转换为十进制数,然后再转换。
【例1⁃9】将二进制数01000011B转换为8421 BCD码。
表1⁃3 十进制数与8421 BCD码对应关系
解:01000011B=67=[01100111]BCD
需要指出的是,决不能把[01100111]BCD误认为01100111 B,二进制码01100111 B的值为103,而[01100111]BCD的值为67。显然,两者是不一样的。
【复习思考题】
1.5 为什么要在数字系统中采用二进制数?
1.6 二进制数有什么缺点?如何改善?
1.7 二进制数减法,为什么有时差值会大于被减数?
1.8 什么叫BCD码?为什么在数字系统中要引入BCD码?
1.9 BCD码与二进制码有否区别?如何转换?