当前位置: 首页 > news >正文

26考研——数据的表示和运算_运算方法和运算电路_定点数的加减运算 定点数的乘除运算(2)

408答疑


文章目录

  • 二、运算方法和运算电路
    • 定点数的加减运算
      • 补码的加减法运算
        • 补码运算的特点
        • 示例分析
      • 补码加减运算后的溢出判断
        • 采用一位符号位
        • 采用双符号位
        • 采用一位符号位根据数值位的进位情况判断溢出
      • 补码加减运算电路
        • 无符号数与有符号数加/减运算能用同一个加法器实现的理由
          • 原理说明
          • 注意事项
        • 加减运算中 SF、OF 和 CF 值的分析
          • SF 和 OF 值的逻辑表达式
          • CF 标志位的作用
        • 有符号数大小的比较
          • 结论
        • 无符号数大小的比较
      • 原码的加减法运算(了解即可)
        • 加法规则
        • 减法规则
    • 定点数的乘除运算
      • 定点乘法运算
        • 乘法运算的基本原理
          • 用加法、移位指令实现乘法运算的原理
          • 数学推导过程
          • 乘法运算的实现
          • 注意事项
        • 乘法运算电路
          • 乘法电路中控制逻辑的作用
          • 无符号数和有符号数乘法指令的溢出判断
      • 除法运算
        • 除法运算的基本原理
          • 原码的除法运算
          • 无符号数的除法运算
        • 除法运算电路
  • 四、参考资料
    • 鲍鱼科技课件
    • 26王道考研书


二、运算方法和运算电路

定点数的加减运算

补码的加减法运算

补码加减运算规则简单,易于实现。补码加减运算的公式如下(设机器字长为 n + 1 n+1 n+1)。

  • 加法运算: [ A + B ] 补 = [ A ] 补 + [ B ] 补 ( m o d 2 n + 1 ) [A + B]_{\text{补}} = [A]_{\text{补}} + [B]_{\text{补}} \pmod{2^{n+1}} [A+B]=[A]+[B](mod2n+1)
  • 减法运算: [ A − B ] 补 = [ A ] 补 + [ − B ] 补 ( m o d 2 n + 1 ) [A - B]_{\text{补}} = [A]_{\text{补}} + [-B]_{\text{补}} \pmod{2^{n+1}} [AB]=[A]+[B](mod2n+1)
补码运算的特点
  1. 按二进制运算规则运算,逢二进一。
  2. 若做加法,两个数的补码直接相加;若做减法,则将被减数与减数的负数补码相加。
  3. 符号位与数值位一起参与运算,加、减运算结果的符号位也在运算中直接得出。
  4. 最终运算结果的高位丢弃,保留 n + 1 n+1 n+1 位,运算结果亦为补码。
示例分析

设字长为 8 位(含 1 位符号位), A = 15 A = 15 A=15 B = 24 B = 24 B=24,求 [ A + B ] 补 [A + B]_{\text{补}} [A+B] [ A − B ] 补 [A - B]_{\text{补}} [AB]

  • A = + 15 = + 0001111 A = +15 = +0001111 A=+15=+0001111 B = + 24 = + 0011000 B = +24 = +0011000 B=+24=+0011000;得 [ A ] 补 = 00001111 [A]_{\text{补}} = 00001111 [A]=00001111 [ B ] 补 = 00011000 [B]_{\text{补}} = 00011000 [B]=00011000。求得 [ − B ] 补 = 11101000 [-B]_{\text{补}} = 11101000 [B]=11101000
  • 所以 [ A + B ] 补 = 00001111 + 00011000 = 00100111 [A + B]_{\text{补}} = 00001111 + 00011000 = 00100111 [A+B]=00001111+00011000=00100111,符号位为 0,对应真值为 +39。
  • [ A − B ] 补 = [ A ] 补 + [ − B ] 补 = 00001111 + 11101000 = 11110111 [A - B]_{\text{补}} = [A]_{\text{补}} + [-B]_{\text{补}} = 00001111 + 11101000 = 11110111 [AB]=[A]+[B]=00001111+11101000=11110111,符号位为 1,对应真值为 -9。

补码加减运算后的溢出判断

仅当两个符号相同的数相加或两个符号相异的数相减才可能产生溢出,如两个正数相加,而结果的符号位却为 1(结果为负);一个负数减去一个正数,结果的符号位却为 0(结果为正)。

补码定点数加减运算溢出判断的方法有 3 种。

采用一位符号位

减法运算在机器中是用加法器实现的,因此无论是加法还是减法,只要参加操作的两个数的符号相同,结果又与原操作数的符号不同,则表示结果溢出。

A A A 的符号为 A s A_s As B B B 的符号为 B s B_s Bs,运算结果的符号为 S s S_s Ss,则溢出逻辑表达式为

V = A s B s S s ‾ + A s ‾ B s ‾ S s V = A_sB_s\overline{S_s} + \overline{A_s}\overline{B_s}S_s V=AsBsSs+AsBsSs

V = 0 V = 0 V=0,表示无溢出;若 V = 1 V = 1 V=1,表示有溢出。

采用双符号位

双符号位法也称模 4 补码。运算结果的两个符号位 S s 1 S s 2 S_{s_1}S_{s_2} Ss1Ss2 相同,表示未溢出;运算结果的两个符号位 S s 1 S s 2 S_{s_1}S_{s_2} Ss1Ss2 不同,表示溢出,此时最高位符号位代表真正的符号。

符号位 S s 1 S s 2 S_{s_1}S_{s_2} Ss1Ss2 的各种情况如下:

  1. S s 1 S s 2 = 00 S_{s_1}S_{s_2} = 00 Ss1Ss2=00:表示结果为正数,无溢出。
  2. S s 1 S s 2 = 01 S_{s_1}S_{s_2} = 01 Ss1Ss2=01:表示结果正溢出。
  3. S s 1 S s 2 = 10 S_{s_1}S_{s_2} = 10 Ss1Ss2=10:表示结果负溢出。
  4. S s 1 S s 2 = 11 S_{s_1}S_{s_2} = 11 Ss1Ss2=11:表示结果为负数,无溢出。

溢出逻辑判断表达式为 V = S s 1 ⊕ S s 2 V = S_{s_1} \oplus S_{s_2} V=Ss1Ss2,若 V = 0 V = 0 V=0,表示无溢出;若 V = 1 V = 1 V=1,表示有溢出。

采用一位符号位根据数值位的进位情况判断溢出

若符号位(最高位)的进位 C n C_n Cn 与最高数位(次高位)的进位 C n − 1 C_{n-1} Cn1 相同,说明无溢出,否则说明有溢出。溢出逻辑判断表达式为 V = C n ⊕ C n − 1 V = C_n \oplus C_{n-1} V=CnCn1,若 V = 0 V = 0 V=0,表示无溢出;若 V = 1 V = 1 V=1,表示有溢出。

补码加减运算电路

无符号数与有符号数加/减运算能用同一个加法器实现的理由
原理说明

已知一个数的补码表示为 Y Y Y,则这个数的负数的补码为 Y ‾ + 1 \overline{Y} + 1 Y+1,因此,只要在原加法器的 Y Y Y 输入端加 n n n 个反向器以实现各位取反的功能,然后加一个 2 选 1 多路选择器,用一个控制端 Sub 来控制,以选择是将 Y Y Y 输入加法器还是将 Y Y Y 输入加法器,并将 Sub 同时作为低位进位送到加法器(做减法时实现未位加 1),如下图所示。该电路可实现模 2 n 2^n 2n 补码加减运算。当 Sub 为 1 时,做减法,实现 X + Y ‾ + 1 = [ x ] 补 + [ − y ] 补 X + \overline{Y} + 1 = [x]_{\text{补}} + [-y]_{\text{补}} X+Y+1=[x]+[y];当 Sub 为 0 时,做加法,实现 X + Y = [ x ] 补 + [ y ] 补 X + Y = [x]_{\text{补}} + [y]_{\text{补}} X+Y=[x]+[y]

在这里插入图片描述

无符号整数相当于正整数的补码表示,因此上图的电路同时也能实现无符号数的加/减运算,对于有符号数 x x x y y y,图中的 X X X Y Y Y 分别是 x x x y y y 的补码表示;对于无符号数 x x x y y y,图中的 X X X Y Y Y 分别是 x x x y y y 的二进制表示。不论是补码减法还是无符号数减法,都是用被减数加上减数的负数的补码( Y ‾ + 1 \overline{Y} + 1 Y+1)来实现的。

注意事项

运算器本身无法识别所处理的二进制串是有符号数还是无符号数。例如, 0 − 1 = 00...0 + 11...1 = 11...1 0 - 1 = 00...0 + 11...1 = 11...1 01=00...0+11...1=11...1;若解释为有符号数,对应值为 -1,结果正确;若解释为无符号数,对应值为 2 n − 1 2^n - 1 2n1 n n n 位无符号数的最大值),结果出错。此类易混点是统考极易考查的内容。

可通过标志信息来区分有符号整数运算结果和无符号整数运算结果。

加减运算中 SF、OF 和 CF 值的分析
SF 和 OF 值的逻辑表达式
  • 零标志 ZF: Z F = 1 ZF = 1 ZF=1 表示结果 F 为 0。对于无符号数和有符号数的运算,ZF 都有意义。
  • 溢出标志 OF:判断有符号数运算是否溢出,它是符号位进位与最高数位进位的异或结果,即 O F = C n ⊕ C n − 1 OF = C_n \oplus C_{n-1} OF=CnCn1。对于无符号数运算,OF 没有意义,通常地说,就是根据 OF 无法判断无符号数运算是否溢出。例如,无符号数加法 010 + 011 = 101 010 + 011 = 101 010+011=101,此时 O F = 1 OF = 1 OF=1,但结果未溢出。
  • 符号标志 SF:表示结果的符号,即 F 的最高位。对于无符号数运算,SF 没有意义。
CF 标志位的作用

进/借位标志 CF:表示无符号数运算时的进位/借位,判断是否发生溢出。

  • 加法时, C F = 1 CF = 1 CF=1 表示结果溢出,因此 CF 等于进位输出 C out C_{\text{out}} Cout
  • 减法时, C F = 1 CF = 1 CF=1 表示有借位,即不够减,所以 CF 等于进位输出 C out C_{\text{out}} Cout 取反。

综合可得 C F = S u b ⊕ C out CF = Sub \oplus C_{\text{out}} CF=SubCout。例如,无符号数加法 110 + 011 110 + 011 110+011 最高位产生进位,无符号数减法 000 − 111 000 - 111 000111 最高位产生借位,结果均发生溢出( C F = 1 CF = 1 CF=1)。对于有符号数运算,CF 没有意义,也就是说,根据 CF 无法判断有符号数运算是否溢出。

有符号数大小的比较

对于有符号数的运算,零标志 ZF、溢出标志 OF、符号标志 SF 才有意义。假设两个有符号数 A A A B B B,用补码表示,以执行 [ A ] 补 − [ B ] 补 [A]_{\text{补}} - [B]_{\text{补}} [A][B] 为例来说明 ZF、OF、SF 标志的几种可能情况。

  1. A = B A = B A=B,如 [ A ] 补 − [ B ] 补 = 011 − 011 = [ A ] 补 + [ − B ] 补 = 011 + 101 = ( 1 ) 000 [A]_{\text{补}} - [B]_{\text{补}} = 011 - 011 = [A]_{\text{补}} + [-B]_{\text{补}} = 011 + 101 = (1)000 [A][B]=011011=[A]+[B]=011+101=(1)000,此时结果为零,即 Z F = 1 ZF = 1 ZF=1,最高位进位与次高位进位的异或结果 O F = C 3 ⊕ C 2 = 0 OF = C_3 \oplus C_2 = 0 OF=C3C2=0,结果的最高位 S F = 0 SF = 0 SF=0

  2. A > B A > B A>B,如 [ A ] 补 − [ B ] 补 = 010 − 001 = 010 + 111 = ( 1 ) 001 [A]_{\text{补}} - [B]_{\text{补}} = 010 - 001 = 010 + 111 = (1)001 [A][B]=010001=010+111=(1)001,此时 Z F = 0 ZF = 0 ZF=0 O F = 0 OF = 0 OF=0 S F = 0 SF = 0 SF=0;又如 [ A ] 补 − [ B ] 补 = 011 − 101 = 011 + 011 = 110 [A]_{\text{补}} - [B]_{\text{补}} = 011 - 101 = 011 + 011 = 110 [A][B]=011101=011+011=110,此时 Z F = 0 ZF = 0 ZF=0 O F = 1 OF = 1 OF=1 S F = 1 SF = 1 SF=1

  3. A < B A < B A<B,如 [ A ] 补 − [ B ] 补 = 000 − 001 = 000 + 111 = 111 [A]_{\text{补}} - [B]_{\text{补}} = 000 - 001 = 000 + 111 = 111 [A][B]=000001=000+111=111,此时 Z F = 0 ZF = 0 ZF=0 O F = 0 OF = 0 OF=0 S F = 1 SF = 1 SF=1。又如 [ A ] 补 − [ B ] 补 = 101 − 011 = 101 + 101 = ( 1 ) 010 [A]_{\text{补}} - [B]_{\text{补}} = 101 - 011 = 101 + 101 = (1)010 [A][B]=101011=101+101=(1)010,此时 Z F = 0 ZF = 0 ZF=0 O F = 1 OF = 1 OF=1 S F = 0 SF = 0 SF=0

结论
  • Z F = 1 ZF = 1 ZF=1 时,说明 A = B A = B A=B
  • Z F = 0 ZF = 0 ZF=0 且未发生溢出时,即 O F = 0 OF = 0 OF=0 时,若 S F = 0 SF = 0 SF=0,则表示结果非负,说明 A > B A > B A>B;当发生溢出时,即 O F = 1 OF = 1 OF=1 时,若 S F = 1 SF = 1 SF=1,则必然是正数减去负数发生溢出导致结果为负,因此,当 O F = S F OF = SF OF=SF(或 O F ⊕ S F = 0 OF \oplus SF = 0 OFSF=0)且 Z F = 0 ZF = 0 ZF=0 时,说明 A > B A > B A>B
  • Z F = 0 ZF = 0 ZF=0 且未发生溢出时,即 O F = 0 OF = 0 OF=0 时,若 S F = 1 SF = 1 SF=1,则表示结果为负,说明 A < B A < B A<B;当发生溢出时,即 O F = 1 OF = 1 OF=1 时,若 S F = 0 SF = 0 SF=0,则必然是负数减去正数发生溢出导致结果为正,因此,当 O F ≠ S F OF \neq SF OF=SF(或 O F ⊕ S F = 1 OF \oplus SF = 1 OFSF=1)且 Z F = 0 ZF = 0 ZF=0 时,说明 A < B A < B A<B
无符号数大小的比较

对于无符号数的运算,零标志 ZF、进/借位标志 CF 才有意义。假设有两个无符号数 A A A B B B,下面以执行 A − B A - B AB 为例来说明 ZF、CF 标志的几种可能情况:

  1. A = B A = B A=B,如 A − B = 011 − 011 = [ A ] 补 − [ B ] 补 = [ A ] 补 + [ − B ] 补 = 011 + 101 = ( 1 ) 000 A - B = 011 - 011 = [A]_{\text{补}} - [B]_{\text{补}} = [A]_{\text{补}} + [-B]_{\text{补}} = 011 + 101 = (1)000 AB=011011=[A][B]=[A]+[B]=011+101=(1)000,此时结果为零 Z F = 1 ZF = 1 ZF=1 C F = S u b ⊕ C out = 1 ⊕ 1 = 0 CF = Sub \oplus C_{\text{out}} = 1\oplus 1 = 0 CF=SubCout=11=0
  2. A > B A > B A>B,如 A − B = 010 − 001 = [ A ] 补 − [ B ] 补 = [ A ] 补 + [ − B ] 补 = 010 + 111 = ( 1 ) 001 A - B = 010 - 001 = [A]_{\text{补}} - [B]_{\text{补}} = [A]_{\text{补}} + [-B]_{\text{补}} = 010 + 111 = (1)001 AB=010001=[A][B]=[A]+[B]=010+111=(1)001,此时结果非零 Z F = 0 ZF = 0 ZF=0 C F = S u b ⊕ C out = 1 ⊕ 1 = 0 CF = Sub \oplus C_{\text{out}} = 1\oplus 1 = 0 CF=SubCout=11=0
  3. A < B A < B A<B,如 A − B = 000 − 001 = [ A ] 补 − [ B ] 补 = [ A ] 补 + [ − B ] 补 = 000 + 111 = 111 = 111 A - B = 000 - 001 = [A]_{\text{补}} - [B]_{\text{补}} = [A]_{\text{补}} + [-B]_{\text{补}} = 000 + 111 = 111 = 111 AB=000001=[A][B]=[A]+[B]=000+111=111=111,此时 Z F = 0 ZF = 0 ZF=0 C F = S u b ⊕ C out = 1 ⊕ 0 = 1 CF = Sub \oplus C_{\text{out}} = 1\oplus 0 = 1 CF=SubCout=10=1

Z F = 1 ZF = 1 ZF=1 时,说明 A = B A = B A=B。当 Z F = 0 ZF = 0 ZF=0 C F = 0 CF = 0 CF=0 时,说明 A > B A > B A>B。当 C F = 1 CF = 1 CF=1 时,说明 A < B A < B A<B

原码的加减法运算(了解即可)

在原码加减运算中,将符号位和数值位分开处理,具体的规则如下。

加法规则

遵循“同号求和,异号求差”的原则,先判断两个操作数的符号位。具体来说:

  • 符号位相同,则数值位相加,结果符号位不变,若最高数值位相加产生进位,则发生溢出;
  • 符号位不同,则做减法,绝对值大的数减去绝对值小的数,结果符号位与绝对值大的数相同。
减法规则

先将减数的符号取反,然后将被减数与符号取反后的减数按原码加法进行运算。

原码的加减运算规则比较复杂,因此计算机采用的大多是补码加/减运算。

定点数的乘除运算

定点乘法运算

乘法运算的基本原理
用加法、移位指令实现乘法运算的原理

原码乘法的特点是符号位与数值位分开求得。原码乘法运算分为两步:

  1. 乘积的符号位由两个乘数的符号位“异或”得到。
  2. 乘积的数值位是两个乘数的绝对值之积。

两个定点数的数值部分之积可视为两个无符号数的乘积。下面是两个无符号数相乘的手算过程。
在这里插入图片描述

数学推导过程

X × Y = X × Y 4 × 2 − 4 + X × Y 3 × 2 − 3 + X × Y 2 × 2 − 2 + X × Y 1 × 2 − 1 = 2 − 1 { 2 − 1 [ 2 − 1 ( 2 − 1 ( 0 + X × Y 4 ) + X × Y 3 ) + X × Y 2 ] + X × Y 1 } \begin{aligned} X \times Y &= X \times Y_4 \times 2^{-4} + X \times Y_3 \times 2^{-3} + X \times Y_2 \times 2^{-2} + X \times Y_1 \times 2^{-1} \\ &=2^{-1} \{ 2^{-1} [ 2^{-1} ( 2^{-1} (0 + X \times Y_4) + X \times Y_3 ) + X \times Y_2 ] + X \times Y_1 \} \end{aligned} X×Y=X×Y4×24+X×Y3×23+X×Y2×22+X×Y1×21=21{21[21(21(0+X×Y4)+X×Y3)+X×Y2]+X×Y1}

更普遍地, n n n 位无符号数乘法 X × Y X \times Y X×Y 可递归地定义如下:

  • P 0 = 0 P_0 = 0 P0=0(初始)
  • P 1 = 2 − 1 ( P 0 + X × Y n ) P_1 = 2^{-1}(P_0 + X \times Y_n) P1=21(P0+X×Yn)
  • P 2 = 2 − 1 ( P 1 + X × Y n − 1 ) P_2 = 2^{-1}(P_1 + X \times Y_{n-1}) P2=21(P1+X×Yn1)
  • P n = 2 − 1 ( P n − 1 + X × Y 1 ) P_n = 2^{-1}(P_{n-1} + X \times Y_1) Pn=21(Pn1+X×Y1)

其递推公式为:

P i + 1 = 2 − 1 ( P i + X × Y n − i ) ( i = 0 , 1 , 2 , ⋯   , n − 1 ) P_{i+1} = 2^{-1}(P_i + X \times Y_{n-i}) \quad (i = 0, 1, 2, \cdots, n-1) Pi+1=21(Pi+X×Yni)(i=0,1,2,,n1)

最终乘积为:

P n = X × Y P_n = X \times Y Pn=X×Y

乘法运算的实现

由上述分析可知,乘法运算可用加法和移位运算来实现(乘以 2 − 1 2^{-1} 21 相当于做一次右移),两个 n n n 位无符号数相乘共需进行 n n n 次加法和 n n n 次移位运算。原码乘法运算的过程可归纳如下:

  1. 被乘数和乘数均取绝对值参加运算,视为无符号数,符号位为 x s ⊕ y s x_s \oplus y_s xsys
  2. 部分积 P i P_i Pi 是乘法运算的中间结果,初值 P 0 = 0 P_0 = 0 P0=0。从乘数的最低位 Y n Y_n Yn 开始,将前面所得的部分积 P i P_i Pi 加上 X × Y n − i X \times Y_{n-i} X×Yni,然后右移一位,此步骤重复 n n n 次。
注意事项

参与运算的是两个数的数值位,因此运算过程中的右移操作均为逻辑右移。

乘法运算电路
乘法电路中控制逻辑的作用

下图是 32 位无符号乘法运算的逻辑结构图。部分积和被乘数 X X X 做无符号数加法时,可能产生进位,因此设置一个专门的进位位 C C C。乘积寄存器 P P P 初始置 0。计数器 C n C_n Cn 初值为 32,每循环一次减 1。ALU 是乘法器的核心部件,对乘积寄存器 P P P 和被乘数寄存器 X X X 的内容做“无符号加法”运算,结果送回乘积寄存器 P P P,进位存放在 C C C 中。每次循环都对进位位 C C C、寄存器 P P P 和寄存器 Y Y Y 实现同步“逻辑右移”,此时,进位位 C C C 移入寄存器 P P P 的最高位,寄存器 Y Y Y 的最低位移出。每次从寄存器 Y Y Y 移出的最低位都被送到控制逻辑,以决定被乘数是否“加”到部分积上。
在这里插入图片描述

无符号数和有符号数乘法指令的溢出判断

在字长为 32 位的计算机中,对于两个 int 型变量 x 和 y 的乘积,若乘积高 32 位的每一位都相同,且都等于乘积低 32 位的符号,则表示不溢出,否则表示溢出。当 x 和 y 都为 unsigned int 型变量时,若乘积的高 32 位全为 0,则表示不溢出,否则表示溢出。

统考真题还涉及过阵列乘法器的基本概念。阵列乘法器是一种快速乘法器,它采用硬件叠加的方式,所有部分积同时产生并组成一个阵列,再运用多操作数相加,就能得到最终的积,因此最快可在一个时钟周期内完成一条乘运算指令。

除法运算

除法运算的基本原理
原码的除法运算

原码的除法运算与乘法运算很相似,都是一种移位和加减运算迭代的过程,但比乘法运算更复杂。
n n n 位定点数的除法运算,需统一为:

  • 一个 2 n 2n 2n 位的数除以一个 n n n 位的数,得到一个 n n n 位的商,因此需要对被除数进行扩展。
  • 对于定点正小数(原码小数),只需在被除数低位添 n n n 个 0 即可。对于定点正整数(无符号数),只需在被除数高位添 n n n 个 0 即可。

做整数除法时,若除数为 0,则发生“除数为 0”异常,此时需调出操作系统相应的异常处理程序进行处理。下面以两个无符号数为例说明手算除法步骤。
在这里插入图片描述

上述除法运算的过程可归纳如下:

  1. 被除数与除数相减,够减则上商为 1,不够减则上商为 0。
  2. 每次得到的差为中间余数,将除数右移后与上次的中间余数比较。用中间余数做除数,够减则上商为 1,不够减则上商为 0。如此重复,直到商的位数满足要求为止。
无符号数的除法运算

若是 2 n 2n 2n 位除以 n n n 位的无符号数,商的位数为 n + 1 n+1 n+1 位,当第一次试商为 1 时,则表示结果溢出(无法用 n n n 位表示商),如 11111111 / 1111 = 10001 1111 1111/1111 = 1 0001 11111111/1111=10001。若是两个 n n n 位的无符号数相除,则第一位商为 0,且结果肯定不会溢出,如两个 4 位数相除的最大商为 00001111 / 0001 = 1111 0000 1111/0001 = 1111 00001111/0001=1111。对于浮点数尾数的原码小数相除,第一次试商为 1,则说明尾数部分有溢出,可通过右规消除。

计算机内部的除法运算与手算除法一样,通过被除数(中间余数)减除数来得到每一位商,够减上商 1,不够减上商 0。原码除法运算也要将符号位和数值位分开处理,商的符号位是两个数的符号位的“异或”结果,商的数值位是两个数的绝对值之商。

除法运算电路

下图是一个 32 位除法逻辑结构图。寄存器 Y Y Y 存放除数;寄存器 R R R 初始时存放扩展被除数的高 32 位,运算过程中存放中间余数的高位部分,结束时存放的是余数;寄存器 Q Q Q 初始时存放扩展被除数的低 32 位,运算过程中存放中间余数的低位部分、部分存放商,结束时存放的是 32 位商。ALU 是除法器的核心部件,对寄存器 R R R Y Y Y 的内容做加减运算,运算结果被送回寄存器 R R R。计数器 C n C_n Cn 初值为 32,每循环一次减 1。每次循环,寄存器 R R R Q Q Q 实现同步左移,左移时, Q Q Q 的最高位移入 R R R 的最低位, Q Q Q 中空出的最低位被上商。从低位开始,逐次把商的各个数位左移到 Q Q Q 中。每次由控制逻辑根据 ALU 运算结果的符号来决定上商是 0 还是 1。

在这里插入图片描述

若两个 32 位 int 型整数相除,则除了 − 2 31 / − 1 -2^{31}/-1 231/1 会溢出,其余情况都不会溢出。

四、参考资料

鲍鱼科技课件

b站免费王道课后题讲解:
在这里插入图片描述

网课全程班:
在这里插入图片描述

26王道考研书

相关文章:

  • 什么是原型、原型链?
  • Linux网络编程——数据链路层详解,以太网、MAC地址、MTU、ARP、DNS、NAT、代理服务器......
  • 屏幕模块解析
  • 数据分析-数据预处理
  • 【KWDB 创作者计划】第二卷:开发者实战篇
  • mysql 商城商品属性开发的动态解决方案
  • 个人博客系统后端 - 注册登录功能实现指南
  • 设计模式——工厂模式学习总结
  • 企业数据安全---数据分级
  • 【深度学习与大模型基础】第9章-条件概率以及条件概率的链式法则
  • Linux xorg-server 解析(二)- 如何调试 xorg-server
  • asm汇编字符串操作
  • 【NumPy科学计算:高性能数组操作核心指南】
  • a sort.py demo
  • 2024年React最新高频面试题及核心考点解析,涵盖基础、进阶和新特性,助你高效备战
  • Vue 接口请求 Nginx配置实时压缩 速度起飞
  • LVGL Arc控件和Roller控件详解
  • 【Java多线程】告别线程混乱!深度解析Java多线程4大实现方式(附实战案例)
  • Spring Boot 3.4.3 和 Spring Security 6.4.2 结合 JWT 实现用户登录
  • 青少年编程考试 CCF GESP图形化编程 四级认证真题 2025年3月
  • 网站建设网店名字/北京口碑最好的it培训机构
  • 做推广那个网站比较靠谱/seo基础入门视频教程
  • 有什么做视频的免费素材网站/sem推广什么意思
  • 做网站一天能赚多少钱/游戏广告联盟平台
  • 淮安网站开发/如何做优化排名
  • 网站更改关键词/如何做一个自己的网页