由于数字电路的基本单元和运算规则都是基于2进制数展开的,因此2进制数在数字电路,计算机系统中应用非常广泛,可以说是现代数字技术和数字经济的基石。本节内容着重研究2进制的构成,计算及应用。由于8进制和16进制与2进制密切相关,相互转换简单,因此本节在2进制的基础上也着重介绍8进制数和16进制数,以及他们之间相互转换关系。
1. 二进制数的构成
二进制数的数码为:0~1;基数是2(10),权值为2的幂次方,即2n。运算规律:逢2进1,即:1+1=10。虽然2进制数只有0,1两个数码,但带权值的多位2进制数可以表示任意实数。如根号2可以表示为,其中(10)2 的下标2表示2进制数,2进制数10对应10进制数的2。由于人们已经非常习惯使用10进制数,多位2进制数所表达的数值不直观,因此会经常将2进制数转换成10进制数。但无论怎么转换,不同进制数所表达的真实数值的大小应相同。
2. 2进制数的权展开式
二进制的权展开式的规则和十进制一样都符合数制章节中介绍的规则,对于具体的2进制数(1101)2 的展开步骤如图1所示。
图1 2进制权展开式及对应10进制数
例1,将2进制数(101.01)2按权展开,并转换成10进制数。
(101.01)2= 1×22 +0×21+1×20+0×2-1+1 ×2-2 =(5.25)10
3. 8进制数
八进制数的数码为0~7;基数是8(10),元素集合为{0,1,2,3,4,5,6,7},权值为8的幂次方,即8n。运算规律:逢8进一,即:7+1=10。如8进制数(1743)8的按权值展开的步骤如图2所示,
图2
例2:将8进制数(207.04)8按权展开,并计算对应的10进制数值。
(207.04)8= 2×82 +0×81+7×80+0×8-1+4 ×8-2 =(135.0625)10
4. 16进制数
十六进制数 的数码为0~9,A,B,C,D,E,F;基数是16(10),权值为16的幂次方,即16n。运算规律:逢16进一,即:F+1=10。16进制数(130d)16的展开步骤如图3所示,
图3
例3:将16进制数(D8.A)16按权展开并换算成10进制数
(D8.A)16= 13×161 +8×160+10 ×16-1=(216.625)10
5. 16进制与2进制数之间的相互转换
由于16进制由{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} 16个元素组成,对应的2进制由4位0,1数字构成,而且一一对应。它们的对应关系如下表所示:
表1
2 进制 | 16进制 | 10进制 |
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 2 | 2 |
0011 | 3 | 3 |
0100 | 4 | 4 |
0101 | 5 | 5 |
0110 | 6 | 6 |
0111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | A | 10 |
1011 | B | 11 |
1100 | C | 12 |
1101 | D | 13 |
1110 | E | 14 |
1111 | F | 15 |
如表1所示,4位2进制与1位16进制一一对应,而16与10进制之间并不是一一对的关系。进一步探讨可以看出,8位2进制数与2位16进制数之间也是一一对应的,而且4位2进制数进位的权值为24与16进制进位的权值161相同,都是16。可见2进制与16进制之间的转换非常简单。
-
由16进制转换成2进制按如下步骤进行:
(1)将每位16进制数用4位2进制数替代,小数点保持不变。
(2)将下标由16改成2
例4: 将16进制数(AB.CD)16转换成对应的2进制数
(AB.CD)16=(10101011.11001101)2
-
由2进制数转换成16进制数步骤如下:
(1)将2进制数分成整数和小数两个部分
(2)整数部分从小数点开始自右向左,每4位2进制数做一次分割,左边不够4位时补零。
如 (11001)2=(0001_1001). 由于下划线“_”在后续课程中(Verilog)也是标准的数字分隔符,这里也采用”_”作为多位2进制数的分隔符。
(3)小数部分,自小数点开始向右每4位做一次分割,右边不够4位,补零。
(4)每4位2进制以一位16进制数替代
例5 :将2进制数(1110111011.110101)2转换成16进制数,并用10进制进行验证。
(1110111011.110101)2=(0011_1011_1011.1101_0100)2=(3BB.D4)16
将2进制和16进制表示的数分别按权值展开,计算的十进制数.
(1)2进制数 (1110111011.110101)2=(1 x 29+1 x 28 +1 x 27 +0+1 x 25 +1 x 24 + 1 x 23 +0+1 x 21 +1) + (1 x 2-1 + 1 x 2-2 +0 +1 x 2-4 +0 + 1 x 2-6) =(955.828125)10
(2)16进制数 (3BB.D4)16 =(3 x 162+ 11x 161+11 ) + ( 13 x 16-1 + 4 x 16-2)=(768+ 208 +11)+ (0.828125 )=(955.828125)10
(3)通过权值展开法计算得到的10进制数值相同,因此可以证明16进制到2进制的转换是正确的。
6. 2进制与8进制之间的相互转换
与16进制到2进制的转换非常类似,3位2进制与1位8进制一一对应,其映射关系如表2:
表2
2进制(3位) | 8进制 | 10进制 |
000 | 0 | 0 |
001 | 1 | 1 |
010 | 2 | 2 |
011 | 3 | 3 |
100 | 4 | 4 |
101 | 5 | 5 |
110 | 6 | 6 |
111 | 7 | 7 |
从表2可以看出,3位2进制与1位8进制是一一对应的关系,但与10进制却没有该一一对应的关系,因为10进制还有8,9两个数字。
-
8进制转换成2进制
(1)小数点保持不动
(2)将每位8进制用对应的3位2进制替代
(3)将表示进制的下标改成2,用于标识2进制数
例6: 将8进制数(712.31)8转换成2进制数
(712.31)8=(111_001_010.011_001)2
-
2进制数转换成8进制数
(1)将2进制数分成整数和小数两个部分,
(2)整数部分从小数点开始自右向左,进行3位2进制数分割,左边不够3位时补零。
(3)小数部分从小数点开始自左向右,进行3位2进制数分割,右边不够3位时补零。
7. 8进制数与16进制数之间相互转换
由于8进制数和16进制数之间在位数较多时,它们之间的关系不是非常明晰,因此一般通过二进制作为桥梁实现相互转换
例7:将8进制数(6754.567)8 转换成16进制数
(1)将8进制转换成2进制数
(6754.567)8=(110_111_101_100.101_110_111)2
(2)将2进制数按照4位分割,需要时补零
(110_111_101_100.101_110_111)2 =(1101_1110_1100.1011_1011_1000)2
(3)将4位2进制数用1位16进制替代,转化成16进制数
(6754.567)8=(110_111_101_100.101_110_111)2 =(1101_1110_1100.1011_1011_1000)2 =(DEC.B8)16
例8: 将16进制数(34E.78)16转换成8进制数
(34E.78)16=(0011_0100_1110.0111_1000)2=(001_101_001_110.011_110_000)2=(1516.36)8 丢弃小数点后无效的0
9. 数值的其它表示方法
在Verilog、System Verilog 以及计算机语言中经常使用不同前缀表示不同进制数的方法。同时也可以在前缀之前加上一个数字表示该数占用2进制的位数。一般以前缀d表示10进制数,b表示2进制数,O表示8进制数,H表16进制数(在计算机软件中使用X)。
10进制 12’d987 — 12‘表示该数占12位2进制位, d表示 10进制数
16进制 12’he34 –12‘表示该数占12位2进制位, h表示 16进制数
8进制 9’O257 –9‘表示该数占9位2进制位, O表示8进制数
2进制 4’b1101 –4‘表示该数占4位2进制位, b表示 2进制数
练习题: 说明 9’O257与8’O257有何不同?
*10. N进制权值展开及到10进制的转换
前面已经讲解了2,8,10,16进制的构成规则,按照权值展开,以及不同数制之间的相互转换。由此推广,可以扩展到任意进制的定义以及运算规则。
一般地,N进制需要用到N个数码,基数是N;运算规律为逢N进一。如果一个N进制数M包含n位整数和m位小数,即 (an-1 an-2 … a1 a0 · a-1 a-2 … a-m)N 则该数的权展开式为: (M)N = an-1×Nn-1 + an-2 ×Nn-2 + … +a1×N1+ a0 ×N0+a-1 ×N-1+a-2 ×N-2+… +a-m × N-m ,由权展开式很容易将一个N进制数转换为十进制数。