考纲内容
- 数制与编码
- 进位计数制及其相互转换
- 真值与机器数
- BCD码
- 字符与字符串
- 校验码
- 定点数的表示和运算
- 定点数的表示
- 无符号数的表示
- 有符号数的表示
- 定点数的运算
- 定点数的移位运算
- 原码定点数的加减运算
- 补码定点数的加减运算
- 定点数的乘除运算
- 溢出概念和判别方法
- 定点数的表示
- 浮点数的表示和运算
- 浮点数的表示
- IEEE 754标准
- 浮点数的加减运算
- 浮点数的表示
- 算术逻辑单元(ALU)
- 串行加法器和并行加法器
- ALU的功能和结构
1. 数制与编码
1. 进位计数制及其相互转换
- 二进制编码原因
- 二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本较低
- 二进制位 1 和 0 正好与逻辑值“真”与“假”对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件
- 二进制的编码和运算规则都很简单,通过逻辑门电路就能方便地实现算术运算
1. 进位计数法
- 常见进位计数法:二进制、八进制、十进制、十六进制
- 基数:每个数位所用到的不同数码的个数。如:十进制的基数为10
- 每个数码所表示的数值等于该数码本身乘以位权
2. 不同进制数之间的相互转换
- 二进制 —> 八进制和十六进制
- 整数部分:从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位(十六进制)一组,在数的最左边可根据需要加“0”补齐,分别用八进制数或十六进制数代替
- 小数部分:从小数点开始往右数,将一串二进制分为3位一组(八进制)或4位一组(十六进制),在数的最右边也可根据需要加“0”补齐,分别用八进制数或十六进制数代替
- 任意进制数 —> 十进制数
- 将任意进制数的各位数码与它们的位权相乘,再把乘积相加,就得到了一个十进制数
- 十进制数 —> 任意进制数
- 整数部分——除基取余法(先余为低,后余为高)
- 最先得到的余数为数的最低位,最后取得的余数为数的最高位,商为0时结束
- 小数部分——乘基取整法(先整为高,后整为低)
*最先取得的整数为数的最高位,最后取得的整数为数的最低位,乘积为1.0(或满足精度要求)时结束
- 整数部分——除基取余法(先余为低,后余为高)
并不是每个十进制小数都可以准确地用二进制表示;但任意一个二进制小数都可以用十进制小数表示
2. 真值与机器数
- 真值:机器数所代表的实际值
- 机器数:采用数的符号和数值一起编码,将数据的符号数字化
3. BCD码
用4位二进制数来表示一位十进制数
-
8421码: (有权码)设其各位的数值为 b 3 , b 2 , b 1 , b 0 b_3, b_2, b_1, b_0 b3,b2,b1,b0权值从高到低为8,4,2,1,表示的十进制数为 D = 8 b 3 + 4 b + 2 b 1 + 1 b 0 D=8b_3+4b+2b_1+1b_0 D=8b3+4b+2b1+1b0
- 若相加之和大于等于
(
1010
)
2
(1010)_2
(1010)2即
(
10
)
10
(10)_{10}
(10)10,则要加6修正(1010~1111为无效码),并向高位进位(可在首次相加或修正时产生)
- 若相加之和大于等于
(
1010
)
2
(1010)_2
(1010)2即
(
10
)
10
(10)_{10}
(10)10,则要加6修正(1010~1111为无效码),并向高位进位(可在首次相加或修正时产生)
-
余3码:(无权码)在8421码的基础上加 ( 0011 ) 2 (0011)_2 (0011)2形成的
-
2412码:(有权码)权值由高到低分别为2,4,2,1
- 大于等于5的4位二进制数中最高位为1,小于5的最高位为0
- 大于等于5的4位二进制数中最高位为1,小于5的最高位为0
4. 字符与字符编码
1. 字符编码ASCII码
- 由7位二进制码组成,可表示128个字符,最高位为0
- 编码值
- 0~31为控制字符,用于通信控制或设备的功能控制
- 32为空格SP
- 32~126共95个字符为可印刷字符
- 48~57表示0~9(去掉高3位,只保留低4位,正好是二进制形式的0~9)
- 127为DEL码
2. 汉字的表示与编码
- 区位码:两字节表示一个汉字,每字节用7位码,并将汉字和图形符号排列在一个94行94列的二位代码表中(4位十进制数,前两位为区码,后两位为位码)
- 国标码:将十进制的区位码转换为十六进制数后,再在每字节上加上20H(两字节最高位为0)
- 国标码 = (区位码) 10 _{10} 10 + 2020H
- 汉字内码:将国标码两字节的最高位都改为“1”(为区分中文字符和英文字符)
- 汉字内码 = (国标码) 16 _{16} 16 + 8080H
5. 校验码
- 定义:能够发现或能够自动纠正错误的数据编码
- 原理:增加一些冗余码来检验或纠错编码
- 码距:任意两个合法码字之间最少变化的二进制位数
- 码距越大,纠错、检错能力就越强;检错能力总是大于等于纠错能力
1. 奇偶检验码
- 定义:在原编码上加一个检验位,码距等于2,可以检测出一位错(或奇数位错),但不能确定出错的位置,也不能够检测出偶数位错误,增加的冗余位称为奇偶检验位
- 实现方法:由若干位有效信息再加上一个二进制位(校验位)组成校验码;校验位的取值(0或1)将使整个校验码中“1”的个数为奇数或偶数
- 奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数
- 偶检验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数
- 检错原理:数据传输前,求一次校验位,传输后,再求一次校验位,若两者差值为1,说明有奇数个错误,否则正确或有偶数个错误
- 缺点:具有局限性,奇偶校验只能发现数据代码中奇数位的出错情况,但不能纠正错误
- 适用情况:用于对存储器数据的检查或传输数据的检查
2. 海明校验码
-
原理:在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶检验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化
-
步骤
- 确定海明码的位数
- 设n为有效信息的位数,k为校验位的位数,则
n
+
k
≤
2
k
−
1
n+k\le2^k-1
n+k≤2k−1(若要检测两位错,则需再增加1位校验位,即k+1位)
- 设n为有效信息的位数,k为校验位的位数,则
n
+
k
≤
2
k
−
1
n+k\le2^k-1
n+k≤2k−1(若要检测两位错,则需再增加1位校验位,即k+1位)
- 确定校验位的分布
* 规定校验位 P i P_i Pi在海明位号为 2 i − 1 2^{i-1} 2i−1的位置上,其余各位为信息位 - 分组以形成校验关系
- 被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和
- 校验位取值
- 校验位 P i P_i Pi的值为第i组(由该检验位校验的数据位)所有位求异或
- 校验原理
- 每个校验组分别利用校验位和参与形成该校验位的信息位进行奇偶校验检查,构成k个方程
- S 3 S 2 S 1 = 000 S_3S_2S_1=000 S3S2S1=000,说明无错
- S 3 S 2 S 1 = 001 S_3S_2S_1=001 S3S2S1=001,说明第1位出错,即 H 1 H_1 H1出错,直接将该位取反即可纠错
- 确定海明码的位数
-
特点:检测2位错,纠正1位错
3. 循环冗余校验(CRC)码
- 基本思想:在K位信息码后再拼接R位的校验码,整个编码的长度为N位
- 实现原理
- 发送端:将要传送的K位二进制信息位左移R位,将它与生成多项式G(x)做模2除法,生成一个R位校验码,并附在信息码后,构成一个(CRC)码,共K+R位
- 接收端:利用生成多项式多接收到的编码做模2除法,以检测和确定出错的位置
- 生成多项式:任意一个二进制数码都可用一个系数仅为0或1的二进制系数表示(接收端和发送端的一个约定),如:生成多项式 x 3 + x 2 + 1 x^3+x^2+1 x3+x2+1对应的二进制数为1101
- 步骤
- 移位:将原信息码左移R位,低位补0
- 相除:对移位后的信息码,用生成多项式进行模2除法(做异或运算,不借位),产生余数
- 用除数对被除数最高几位做模2减(异或),不借位
- 除数右移一位,若余数最高位为1,商为1,并对余数做模2减;若余数最高位为0,除数继续右移一位
- 循环直到余数位数小于除数时,该余数为最终余数
- 检错和纠错
- 接收端收到的CRC码,用生成多项式做模2除法,若余数为0,则码字无错;若余数为010,则说明低2位出错,取反即可
- 可检测出所有奇数个错误
- 可检测出所有双比特的错误
- 可检测出所有小于等于校验位长度的连续错误
2. 定点数的表示和运算
1. 定点数的表示
1. 无符号数和有符号数的表示
- 无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值
- 有符号数:二进制数的最高位为符号位,1表示”负“号,0表示“正”号
- 约定:X表示真值, [ X ] 原 [X]_原 [X]原表示原码, [ X ] 补 [X]_补 [X]补表示补码, [ X ] 补 [X]_补 [X]补表示补码, [ X ] 移 [X]_移 [X]移表示移码
2. 机器数的定点表示
- 根据小数点的位置是否固定,在计算机中有两种数据格式:定点表示和浮点表示
- 定点小数:纯小数,小数点的位置固定在符号位之后,有效数值部分的最高位之前
- 若机器字长为n+1位, X = x 0 . x 1 x 2 ⋅ ⋅ ⋅ x n X=x_0.x_1x_2···x_n X=x0.x1x2⋅⋅⋅xn( x 0 x_0 x0为符号位, x 1 x_1 x1~ x n x_n xn是数值的有效部分, x 1 x_1 x1为最高有效位)
- 当 x 0 = 0 , x 1 x_0=0, x_1 x0=0,x1~ x n x_n xn均为1时, X X X为其所能表示的最大正数,真值等于 1 1 1 ~ 2 − n 2^{-n} 2−n
- 当 x 0 = 1 , x 1 x_0=1, x_1 x0=1,x1~ x n x_n xn均为1时, X X X为其(原码)所能表示的最小负数,真值等于 − ( 1 − 2 − n ) -(1-2^{-n}) −(1−2−n)
- 定点整数:纯整数,小数点的位置固定在有效数值部分最低位之后
- 若机器字长为n+1位, X = x 0 x 1 x 2 ⋅ ⋅ ⋅ x n X = x_0x_1x_2···x_n X=x0x1x2⋅⋅⋅xn( x 0 x_0 x0是符号位, x 1 x_1 x1~ x n x_n xn是有效信息, x n x_n xn是最低有效位)
- 当 x 0 = 0 , x 1 x_0=0, x_1 x0=0,x1~ x n x_n xn均为1时, X X X为其所能表示的最大正数,真值等于 2 n − 1 2^n-1 2n−1
- 当 X 0 = 1 , x 1 X_0=1, x_1 X0=1,x1~ x n x_n xn均为1时, X X X为其(原码)所能表示的最小负数,真值等于 − ( 2 n − 1 ) -(2^n-1) −(2n−1)
3. 原码、反码、补码、移码
1. 原码表示法
2. 反码表示法
3. 补码表示法
- 若符号位相同,补码的数值位越大,码值越大
4. 移码表示法
- 移码 = 真值 + 偏置值
2. 定点数的运算
1. 定点数的移位运算
1. 算术移位
- 定义:对象是有符号数,移位过程中符号位保持不变
2. 逻辑移位
- 定义: 对象是无符号数
- 移位规则
- 逻辑左移时,高位移丢,低位添0
- 逻辑右移时,低位移丢,高位添0
3. 循环移位
-
带进位标志位CF的循环移位(大循环)
-
不带进位标志位的循环移位(小循环)
-
特点:移出的数位又被移入数据中,而是否带进位则要看是否将进位标志位加入循环移位
-
适用性:将数据的低字节数据和高字节数据互换
2. 原码定点数的加减法运算
- 设 [ X ] 原 = x s . x 1 x 2 ⋅ ⋅ ⋅ x n [X]_原=x_s.x_1x_2···x_n [X]原=xs.x1x2⋅⋅⋅xn和 [ Y ] 原 = y s . y 1 y 2 ⋅ ⋅ ⋅ y n [Y]_原=y_s.y_1y_2···y_n [Y]原=ys.y1y2⋅⋅⋅yn
- 加法规则:先判符号位,若相同,则绝对值相加,结果符号位不变;若不同,则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同
- 减法规则:两个原码表示的数相减,首先将减数符号取反,然后将被减数与符号取反后的减数按原码加法进行运算
当左边出现溢出时,将溢出位丢掉
3. 补码定点数加减法运算
- 优点:规则简单,易于实现,计算机系统普遍采用补码加减运算
- 特点
- 参与运算的两个操作数均用补码表示
- 按二进制运算规则运算,逢二进一
- 符号位与数值位按同样规则一起参与运算,符号位运算产生的进位要丢掉,结果的符号位由运算得出
- 补码加减运算依据以下公式进行(mod M是为邻将溢出位丢掉)
- [ A + B ] 补 = [ A ] 补 + [ B ] 补 ( m o d M ) [A+B]_补=[A]_补+[B]_补(mod M) [A+B]补=[A]补+[B]补(modM)
- [ A − B ] 补 = [ A ] 补 + [ − B ] 补 ( m o d M ) [A-B]_补=[A]_补+[-B]_补(mod M) [A−B]补=[A]补+[−B]补(modM)
- 运算的数是定点小数时,M=2
- 运算的数是定点整数时,M= 2 n + 1 2^{n+1} 2n+1
- 结果也是补码
4. 符号扩展
- 在计算机算术运算中,有时必须把采用给定位数表示的数转换成具有不同位数的某种表示形式
- 正数:原有形式的符号位移动到新形式的符号位上,新表示形式的所有附加位都用0进行填充
- 负数
- 原码:与正数相同,只不过此时符号位为1
- 反码:原有形式的符号位移动到新形式的符号位上,新表示形式的所有附加位都用1进行填充
- 补码:原有形式的符号位移动到新形式的符号位上,新表示形式的所有附加位都用1(对于整数)或0(对于小数)进行填充
5. 溢出概念和判别方法
1. 溢出的概念
- 定义:溢出是指运算结果超过了数的表示范围
- 上溢:正 + 正 = 负
- 下溢:负 + 负 = 正
2. 判别方法
- 采用一位符号位
- 原理:参加操作的两个数符号相同,结果与原操作数符号不同,则表示溢出
- 溢出逻辑表达式(
A
A
A的符号为
A
s
A_s
As,
B
B
B的符号为
B
s
B_s
Bs,结果符号为
S
s
S_s
Ss)
- 采用双符号位
- 原理:运算结果的两个符号位
S
s
1
S
s
2
S_{s1}S_{s2}
Ss1Ss2相同,表示未溢出;否则表示溢出。此时最高位符号位代表真正的符号
- S s 1 S s 2 = 00 S_{s1}S_{s2}=00 Ss1Ss2=00,表示结果为正数,无溢出
- S s 1 S s 2 = 01 S_{s1}S_{s2}=01 Ss1Ss2=01,表示结果为上溢
- S s 1 S s 2 = 10 S_{s1}S_{s2}=10 Ss1Ss2=10,表示结果为下溢
- S s 1 S s 2 = 11 S_{s1}S_{s2}=11 Ss1Ss2=11,表示结果为负数,无溢出
- 溢出逻辑表达式:
V
=
S
s
1
⨁
S
s
2
V=S_{s1}\bigoplus S_{s2}
V=Ss1⨁Ss2
- V = 1,表示有溢出
- V = 0,表示无溢出
- 原理:运算结果的两个符号位
S
s
1
S
s
2
S_{s1}S_{s2}
Ss1Ss2相同,表示未溢出;否则表示溢出。此时最高位符号位代表真正的符号
实际只存储1个符号位,运算时会复制一个符号位
- 采用一位符号位根据数据位的进位情况判断溢出
- 原理:若符号位的进位 C s C_s Cs与最高数位的进位 C 1 C_1 C1相同,则说明没有溢出,否则表示有溢出
- 溢出逻辑表达式:
V
=
C
s
⨁
C
1
V=C_s\bigoplus C_1
V=Cs⨁C1
- V = 1,表示有溢出
- V = 0,表示无溢出
6. 定点数的乘法运算
由累加和右移操作实现
1. 原码一位乘法
-
特点:符号位与数值位分开计算,乘积的符号由两个数的符号位“异或”形成,数值部分则是两个数的绝对值相乘之积
-
运算规则( [ X ] 原 = x s . x 1 x 2 ⋅ ⋅ ⋅ x n , [ Y ] 原 = y s . y 1 y 2 ⋅ ⋅ ⋅ y n [X]_原=x_s.x_1x_2···x_n,[Y]_原=y_s.y_1y_2···y_n [X]原=xs.x1x2⋅⋅⋅xn,[Y]原=ys.y1y2⋅⋅⋅yn)
- 被乘数和乘数均取绝对值参加运算,符号位为 x s ⨁ y s x_s\bigoplus y_s xs⨁ys
- 部分积的长度同被乘数,取n+1位,以便存放乘法过程中绝对值大于等于1的值,初值为0
- 从乘数的最低位 y n y_n yn开始判断:若 y n y_n yn=1,则部分积加上被乘数 ∣ x ∣ |x| ∣x∣,然后右移一位;若 y n y_n yn=0,则部分积加上0,然后右移(逻辑右移)一位
- 重复步骤3,判断n次
-
注意:运算时可能出现绝对值大于1的情况(但此刻并非溢出),所以部分积和被乘数取双符号位
2. 补码一位乘法(Booth算法)
- 特点:有符号数的乘法,采用相加和相减操作计算补码的乘积
- 运算规则(
[
X
]
补
=
x
s
.
x
1
x
2
⋅
⋅
⋅
x
n
,
[
Y
]
补
=
y
s
.
y
1
y
2
⋅
⋅
⋅
y
n
[X]_补=x_s.x_1x_2···x_n,[Y]_补=y_s.y_1y_2···y_n
[X]补=xs.x1x2⋅⋅⋅xn,[Y]补=ys.y1y2⋅⋅⋅yn)
- 符号位参与运算,运算的数均以补码表示
- 被乘数一般取双符号位参与运算,部分积取双符号位,初值为0,乘数可取单符号位
- 乘数末位增设附加位 y n + 1 y_{n+1} yn+1,且初值为0
- 根据( y n , y n + 1 y_n, y_{n+1} yn,yn+1)的取值来确定操作
- 移位按补码右移规则进行
- 按照上述算法进行n+1步操作,但第n+1步不再移位(共进行n+1次累加和n次右移),仅根据
y
n
y_n
yn和
y
n
+
1
y_{n+1}
yn+1的比较结果做相应的运算
3. 乘法运算总结
7. 定点数的除法运算
- 除法运算可转换成累加和左移(逻辑左移)
1. 原码除法运算(恢复余数法)
2. 原码除法运算(加减交替法、不恢复余数法)
- 特点:商符和商值分开计算,商符由两个操作数的符号位异或形成
- 运算规则(被除数
[
X
]
原
=
x
s
.
x
1
x
2
⋅
⋅
⋅
x
n
[X]_原=x_s.x_1x_2···x_n
[X]原=xs.x1x2⋅⋅⋅xn,除数
[
Y
]
原
=
y
s
.
y
1
y
2
⋅
⋅
⋅
y
n
[Y]_原=y_s.y_1y_2···y_n
[Y]原=ys.y1y2⋅⋅⋅yn)
- 商的符号: Q s = x s ⨁ y s Q_s=x_s\bigoplus y_s Qs=xs⨁ys
- 商的数值: ∣ Q ∣ = ∣ x ∣ / ∣ y ∣ |Q|=|x| / |y| ∣Q∣=∣x∣/∣y∣
- 符号位不参与运算
- 先用被除数减去除数( ∣ X ∣ − ∣ Y ∣ = ∣ X ∣ + ( − ∣ Y ∣ ) = ∣ X ∣ + [ − ∣ Y ∣ ] 补 |X|-|Y|=|X|+(-|Y|)=|X|+[-|Y|]_补 ∣X∣−∣Y∣=∣X∣+(−∣Y∣)=∣X∣+[−∣Y∣]补),当余数为正时,商上1,余数和商左移一位,再减去除数;当余数为负时,商上0,余数和商左移一位,再加上除数
- 当第n+1步余数为负时,需加上
∣
Y
∣
|Y|
∣Y∣得到第n+1步正确的余数(余数与被除数同号)
3. 补码除法运算(加减交替法)
- 特点:符号位与数值位一起参加运算,商符自然形成。除法第一步根据被除数和除数的符号决定是做加法还是减法;上商的原则根据余数和除数的符号位共同决定,同号上商”1“,异号上商”0“;最后一步商恒置”1“
- 运算规则
- 符号位参加运算,除数与被除数均用补码表示,商和余数也用补码表示
- 若被除数和除数同号,则被除数减去除数;若被除数和除数异号,则被除数加上除数
- 若余数和除数同号,则商上1,余数左移一位减去除数;若余数和除数异号,则商上0,余数左移一位加上除数
- 重复执行第3步操作n次
- 若对商的精度没有特殊要求,则一般采用”末位恒置1“法(误差不超过
2
−
n
2^{-n}
2−n)
3. C语言中的整数类型和类型转换
- C语言中,定点整数用补码存储
- 有符号数<–>无符号数:结果保持位值不变,仅改变了解释这些位的方式
- 大字长–>小字长:系统把多余的高位字长直接截断,低位直接赋值
- 小字长–>大字长:不仅要使相应的位值相等,高位部分还会扩展为原数字的符号位
- char类型为8位ASCII码整数,其转换为int时,在高位部分补0即可
4. 数据的存储和排列
1. 大小端模式
-
大端方式:从最高有效字节到最低有效字节的顺序存储数据
-
小端方式:从最低有效字节到最高有效字节的顺序存储数据
2. 按“边界对齐”方式存储
3. 浮点数的表示与运算
1. 浮点数的表示
- 以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动
1. 浮点数的表示格式
- r:阶码的底数(隐含,通常为2)
- E:阶码,常用补码或移码表示的定点整数,反映浮点数的表示范围及小数点的实际位置
- M:尾数,常用原码或补码表示的定点小数,数值部分的位数n反映浮点数的精度
2. 规格化浮点数
- 规格化:通过调整一个非规格化浮点数的尾数和阶码的大小,使非零的浮点数在尾数的最高数位上保证是一个有效值
- 左规:将尾数算术左移一位,阶码减1(基数为2时),左规可能要进行多次
- 右规:当浮点数运算的结果尾数出现溢出时(双符号位为01或10)时,将尾数算术右移一位,阶码加1(基数为2时),右规只需进行一次
- 规格化浮点数的特点
- 尾数M满足:
1
r
≤
∣
M
∣
≤
1
\frac{1}r\le|M|\le1
r1≤∣M∣≤1
- 尾数M满足:
1
r
≤
∣
M
∣
≤
1
\frac{1}r\le|M|\le1
r1≤∣M∣≤1
3. IEEE 754标准
- 浮点数:尾数采用隐藏位策略的原码表示,且阶码用移码表示
- 对于规格化的二进制浮点数,数值的最高位总是“1”,为了能使尾数多表示一位有效位,将这个“1”隐含
- 移码表示的好处
- 移码比较大小更方便(移码越大,真值越大)
- 检验移码的特殊值(0和max)时比较容易
4. 定点、浮点表示的区别
- 若定点数和浮点数的字长相同,则浮点表示法所能表示的数值范围将远远大于定点表示法
- 浮点数扩大了数的表示范围,降低了精度
- 规格化解码超出所能表示的范围时,才发生溢出
2. 浮点数的加减运算
- 特点:阶码运算和尾数运算分开进行,加减运算一律采用补码
- 步骤
- 对阶:使两个数的阶码相等
- 求阶差
- 以小阶向大阶看齐的原则,将阶码小的尾数右移一位,阶加1,直到两个数的阶码相等为止
- 尾数右移时,舍弃掉有效位会产生误差,影响精度
- 尾数求和:将对阶后的尾数按定点数加(减)运算规则运算
- 规格化:尾数的最高数值位与符号位不同时即为规格化形式
- 舍入
- “0”舍“1”入法:尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1
- 恒置“1”法:尾数右移时,不论丢掉的最高数值位是1还是0,都使右移后的尾数末位恒置1
- 溢出判断:阶码符号位不同表示溢出,且真实符号位与高位符号位一致
- 对阶:使两个数的阶码相等
- 强制类型转换
4. 算术逻辑单元(ALU)
- ALU:包括加、减、乘、除四则运算,与、或、非、异或等逻辑运算,移位、求补等操作
1. 串行加法器和并行加法器
加法器 = 全加器 + 其它必要的逻辑电路
1. 一位全加器
- 全加器(FA):最基本的加法单元
- 输入:加数 A i A_i Ai、加数 B i B_i Bi、低位传来的进位 C i − 1 C_{i-1} Ci−1
- 输出:本位和 S i S_i Si、向高位的进位 C i C_i Ci
- 逻辑表达式
- 和表达式:
S
i
=
A
i
⨁
B
i
⨁
C
i
−
1
S_i = A_i \bigoplus B_i\bigoplus C_{i-1}
Si=Ai⨁Bi⨁Ci−1
- 输入有奇数个1时, S i = 1 S_i=1 Si=1,否则为0
- 进位表达式:
C
i
=
A
i
B
i
+
(
A
i
⨁
B
i
)
C
i
−
1
C_i=A_iB_i+(A_i\bigoplus B_i)C_{i-1}
Ci=AiBi+(Ai⨁Bi)Ci−1
- 输入至少有2个1时, C i = 1 C_i=1 Ci=1
- 和表达式:
S
i
=
A
i
⨁
B
i
⨁
C
i
−
1
S_i = A_i \bigoplus B_i\bigoplus C_{i-1}
Si=Ai⨁Bi⨁Ci−1
- 逻辑结构
2. 串行加法器
- 特点
- 只有一个全加器,数据逐位串行送入加法器中进行运算
- 若操作数长n位,则加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器
- 进位触发器用来寄存进位信号,以便参与下一次运算
- 优点:器件少、成本低
- 缺点:运算速度慢
- 适用:某些低速的专用运算器
3. 并行加法器
- 特点
- 由多个全加器组成,其位数与机器字长相同,各位数据同时计算
- 最长运算时间主要由进位信号的传递时间决定的,而每个全加器本身的求和延迟只是次要因素
- 进位表达式:
C
i
=
G
i
+
P
i
C
i
−
1
C_i=G_i+P_iC_{i-1}
Ci=Gi+PiCi−1
- G i G_i Gi——进位产生函数—— G i = A i B i G_i=A_iB_i Gi=AiBi
- P i P_i Pi——进位传递函数—— P i = A i ⨁ B i P_i=A_i\bigoplus B_i Pi=Ai⨁Bi
1. 串行进位
- 定义:把n个全加器串接起来,就可进行两个n位数的相加
- 特点:每级进位直接依赖于前一级进位
2. 并行进位
- 特点:各级进位信号同时形成,又称先行进位、同时进位
- 分组并行进位方式:把n位全加器分为若干小组,小组内的各位之间实行并行快速排位,组件可以采用串行或并行
- 单级先行进位方式:组内并行、组间串行
- 多级先行进位方式:组内并行、组间并行
- 优点:字长对加法时间影响很小
- 缺点:造价高
- 单级先行进位方式:组内并行、组间串行
2. 算术逻辑单元的功能和结构
- ALU的核心是一个并行加法器(加减乘除最终都能归结为加法运算),同时也能执行“与”、“或”、“非”等逻辑匀速