Skip to content

第一章 数制与 BCD 码 ​

所属:数字逻辑基础(第 8 章 8.1 节)

数制(进位计数制):用进位的方法来计数,包括计数符号(数码) 和进位规则两个方面。常用的有十进制、二进制、八进制、十六进制等。


8.1.1 常用数制 ​

1. 常用数制一览 ​

数制计数符号进位规则按权展开式
十进制0~9逢十进一(N)10=∑i=−mn−1ai×10i(N)_{10}=\sum\limits_{i=-m}^{n-1}a_i\times10^{i}
二进制0、1逢二进一(N)2=∑i=−mn−1ai×2i(N)_{2}=\sum\limits_{i=-m}^{n-1}a_i\times2^{i}
八进制0~7逢八进一(N)8=∑i=−mn−1ai×8i(N)_{8}=\sum\limits_{i=-m}^{n-1}a_i\times8^{i}
十六进制0~9、A~F逢十六进一(N)16=∑i=−mn−1ai×16i(N)_{16}=\sum\limits_{i=-m}^{n-1}a_i\times16^{i}

其中 aia_i 为系数、RiR^{i} 为权(RR 为基数)。

例:

  • 十进制:1987.45=1×103+9×102+8×101+7×100+4×10−1+5×10−21987.45=1\times10^{3}+9\times10^{2}+8\times10^{1}+7\times10^{0}+4\times10^{-1}+5\times10^{-2}
  • 十六进制:(6D.4B)16=6×161+13×160+4×16−1+11×16−2(6D.4B)_{16}=6\times16^{1}+13\times16^{0}+4\times16^{-1}+11\times16^{-2}(D=13D=13、B=11B=11)
  • 八进制:(63.45)8=6×81+3×80+4×8−1+5×8−2(63.45)_{8}=6\times8^{1}+3\times8^{0}+4\times8^{-1}+5\times8^{-2}

数字电路中采用二进制的原因:

  1. 数字装置简单可靠;
  2. 二进制数运算规则简单;
  3. 数字电路既可以进行算术运算,也可以进行逻辑运算。

2. 二进制与十进制之间的转换 ​

  • 二进制 → 十进制(按权展开法):

(1011.101)2=1×23+0×22+1×21+1×20+1×2−1+0×2−2+1×2−3=8+2+1+0.5+0.125=(11.625)10(1011.101)_{2}=1\times2^{3}+0\times2^{2}+1\times2^{1}+1\times2^{0}+1\times2^{-1}+0\times2^{-2}+1\times2^{-3}=8+2+1+0.5+0.125=(11.625)_{10}

  • 十进制 → 二进制(提取 2 的幂法):

(45.5)10=32+8+4+1+0.5=1×25+0×24+1×23+1×22+0×21+1×20+1×2−1=(101101.1)2(45.5)_{10}=32+8+4+1+0.5=1\times2^{5}+0\times2^{4}+1\times2^{3}+1\times2^{2}+0\times2^{1}+1\times2^{0}+1\times2^{-1}=(101101.1)_{2}

  • 数制转换还可以采用基数连除、连乘(除基数取余、乘基数取整)等方法。

3. 二进制算术运算 ​

  • 运算规则与十进制相同,区别是逢二进一。
  • 特点:加、减、乘、除全部可以用移位和相加两种操作实现,电路结构简化,所以数字电路中普遍采用二进制算术运算。

加法:逐位相加并处理进位。设 A=A3A2A1A0A=A_3A_2A_1A_0、B=B3B2B1B0B=B_3B_2B_1B_0,和为 S=S3S2S1S0S=S_3S_2S_1S_0:

S0=A0+B0 (进位 C1),S1=A1+B1+C1 (进位 C2), ⋯S_0=A_0+B_0\ (\text{进位 }C_1),\quad S_1=A_1+B_1+C_1\ (\text{进位 }C_2),\ \cdots

A+B=C4S3S2S1S0A+B=C_4S_3S_2S_1S_0

减法:将减数 BB 变成补码后与被减数 AA 相加,若有进位则舍去,其和即为两数之差。例:

Y=(1000)2−(0100)2=(1000)2+[(1011)2+1]=(1000)2+(1100)2=(10100)2→舍去进位(0100)2Y=(1000)_{2}-(0100)_{2}=(1000)_{2}+\left[(1011)_{2}+1\right]=(1000)_{2}+(1100)_{2}=(10100)_{2}\xrightarrow{\text{舍去进位}}(0100)_{2}

乘法:乘以 2 相当于左移一位。实现方法:① 按十进制乘法过程;② 移位相加法。

除法:除以 2k2^{k} 相当于右移 kk 位。例(k=2k=2,即除以 4):

(00001011)2÷(100)2=(00000010)2 (商),余数=(11)2(00001011)_{2}\div(100)_{2}=(00000010)_{2}\ \text{(商)},\qquad \text{余数}=(11)_{2}

4. 带符号数的表示:原码、反码和补码 ​

计算机中的带符号数表示为 符号位 + 真值(合称机器数),符号位用 "0" 表示正、"1" 表示负。

编码定义说明
原码 [X]原[X]_原最高位为符号位,其余为真值部分正负号与原真值对应关系简单、容易理解;但用原码进行加减运算比较困难,0 的表示不唯一
反码 [X]反[X]_反X>0X>0 时同原码;X<0X<0 时符号位不变、数值部分按位取反0 的反码也不唯一
补码 [X]补[X]_补X>0X>0 时同原码;X<0X<0 时 [X]补=[X]反+1[X]_补=[X]_反+1符号位与 [X]原[X]_原 相同;0 的表示唯一,可将减法转换为加法

例(X=−52=−0110100X=-52=-0110100):

[X]原=1 0110100,[X]反=1 1001011,[X]补=[X]反+1=11001100[X]_原=1\,0110100,\qquad [X]_反=1\,1001011,\qquad [X]_补=[X]_反+1=11001100

0 的编码:8 位原码中 +0=0 0000000+0=0\,0000000、−0=1 0000000-0=1\,0000000,不唯一;补码表示唯一:

[−0]补=[−0]反+1=11111111+1=1 00000000→8 位字长舍去进位00000000[-0]_补=[-0]_反+1=11111111+1=1\,00000000\xrightarrow{\text{8 位字长舍去进位}}00000000

特殊数 1000000010000000:

  • 原码中定义为 −0-0;反码中定义为 −127-127;补码中定义为 −128-128;作为无符号数时 (10000000)2=128(10000000)_{2}=128。

表示范围(8 位):

编码表示范围
原码 / 反码−127∼+127-127\sim+127
补码−128∼+127-128\sim+127
无符号数0≤X≤2n−10\le X\le 2^{n}-1

补码运算:引进补码后,减法可转换为加法:

[X+Y]补=[X]补+[Y]补,[X−Y]补=[X]补+[−Y]补[X+Y]_补=[X]_补+[Y]_补,\qquad [X-Y]_补=[X]_补+[-Y]_补

例:X=−0110100X=-0110100、Y=+1110100Y=+1110100,求 X+YX+Y:

[X]补=11001100,[Y]补=01110100[X]_补=11001100,\quad [Y]_补=01110100

[X+Y]补=[X]补+[Y]补=11001100+01110100=01000000[X+Y]_补=[X]_补+[Y]_补=11001100+01110100=01000000

符号位讨论(用二进制补码求 13±1013\pm10、−13±10-13\pm10,6 位字长):

13+10=0 01101+0 01010=0 10111=2313+10=0\,01101+0\,01010=0\,10111=23

13−10=0 01101+1 10110=0 00011=313-10=0\,01101+1\,10110=0\,00011=3

−13+10=1 10011+0 01010=1 11101=−3-13+10=1\,10011+0\,01010=1\,11101=-3

−13−10=1 10011+1 10110=1 01001=−23-13-10=1\,10011+1\,10110=1\,01001=-23

无符号数的溢出:0≤X≤2n−10\le X\le 2^{n}-1,运算结果超出该范围即产生溢出;判断准则:运算时**最高位向更高位有进位(或借位)**则产生溢出。


8.1.2 几种简单的编码 ​

1. 二-十进制码(BCD 码,Binary Coded Decimal codes) ​

用四位二进制代码来表示一位十进制数码。四位二进制有 16 种组合,可任选其中 10 种表示十进制数的 10 个符号,选择方法不同就得到不同的编码形式。常见的有 8421 码、5421 码、2421 码、余 3 码等。

十进制数8421 码5421 码2421 码余 3 码
00000000000000011
10001000100010100
20010001000100101
30011001100110110
40100010001000111
50101100010111000
60110100111001001
70111101011011010
81000101111101011
91001110011111100
  • 有权 BCD 码:每位数码都有确定的位权,如 8421 码、5421 码、2421 码。
    • 例:5421 码 10111011 代表 5+0+2+1=85+0+2+1=8;2421 码 11001100 代表 2+4+0+0=62+4+0+0=6。
    • 5421 码与 2421 码编码不唯一,如 2421 码 01100110 也可表示 6。
  • 表中编码的特征:
    1. 8421 码与代表 0~9 的二进制数一一对应;
    2. 5421 码前 5 个码与 8421 码相同,后 5 个码在前 5 个码的基础上加 1000;
    3. 2421 码前 5 个码与 8421 码相同,后 5 个码以中心对称取反,称为自反代码。例:4→01004\to0100、5→10115\to1011;0→00000\to0000、9→11119\to1111。
  • 无权 BCD 码:每位数码无确定的位权,如余 3 码,其编码规律为在 8421 码上加 0011。例:6 的余 3 码为 0110+0011=10010110+0011=1001。

2. 格雷码(Gray 码) ​

  • 无权码;特点:相邻两个代码之间仅有一位不同,其余各位均相同,这种代码称为循环码,格雷码是循环码。
  • 与四位二进制码之间的关系:设二进制码为 B3B2B1B0B_3B_2B_1B_0、格雷码为 R3R2R1R0R_3R_2R_1R_0,则

R3=B3,R2=B3⊕B2,R1=B2⊕B1,R0=B1⊕B0R_3=B_3,\qquad R_2=B_3\oplus B_2,\qquad R_1=B_2\oplus B_1,\qquad R_0=B_1\oplus B_0

  • ⊕\oplus 为异或运算符,运算规则:两运算数相同结果为 "0",不同结果为 "1"。

3. 计算机字符集 ​

各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见字符集:ASCII、GB2312、BIG5、GB18030、Unicode。


总结要点 ​

主题要点
常用数制十进制 / 二进制 / 八进制 / 十六进制;按权展开 (N)R=∑ai×Ri(N)_{R}=\sum a_i\times R^{i}
二-十转换二 → 十按权展开;十 → 二提取 2 的幂(还可用基数连除、连乘)
二进制算术运算加、减、乘、除均可用移位和相加实现;减法用补码化为加法
原码 / 反码 / 补码符号位 + 真值;[X]补=[X]反+1[X]_补=[X]_反+1;0 的补码唯一;8 位补码范围 −128∼+127-128\sim+127
补码运算[X−Y]补=[X]补+[−Y]补[X-Y]_补=[X]_补+[-Y]_补;无符号数最高位向更高位有进位(或借位)则溢出
BCD 码8421(与二进制一一对应)、5421 / 2421(有权、不唯一;2421 为自反代码)、余 3(无权,8421 + 0011)
格雷码无权循环码,相邻代码仅一位不同;Ri=Bi+1⊕BiR_i=B_{i+1}\oplus B_i

用 VitePress 搭建 · 托管在 GitHub Pages