定点数运算
定点数移位运算
移位操作分为 逻辑移位 和 算数移位 两种方式
由原码得到补码的过程发现,当对其**由低位向高位找到第一个“1”**时,在此“1”左边的各位均与对应的原码相反,在此“1”右边的各位均与对应的原码相同
[x]原 = 1011 1100
[x]补 = 1100 0100
【例1】设机器数字长为8位(含1位符号位),写出A=+26时,三种机器数左、右移一位和两位后的表示形式及对应的真值
【例2】设机器数字长为8位(含1位符号位),写出A=-26时,三种机器数左、右移一位和两位后的表示形式及对应的真值
【例3】整数x的机器数为1101 1000,分别对x进行逻辑右移1位和算术右移1位操作,得到的机器数各是:0110 1100、1110 1100
定点数加减法运算
原码定点数加减法运算
【例】
补码定点数加减法运算
【例】
溢出判断
去看 补码的加减运算和溢出判断 讲的很清楚!
溢出分为上溢和下溢,只有正数加正数才可能发生上溢,负数加负数才会出现下溢,溢出的判断方法可以用下面几种
-
符号位判断
设进行加减操作的操作数为 A 和 B,他们的符号位分别为 S A S_A SA 和 S B S_B SB ,设两数运算结果为 F ,符号位为 S F S_F SF
那么 溢出逻辑 = ( S A ⊕ S F ) ( S B ⊕ S F ) = S A ‾ S B ‾ S F + S A S B S F ‾ 溢出逻辑=(S_A⊕S_F)(S_B⊕S_F)=\overline{S_A}~\overline{S_B}~S_F+S_A~S_B~\overline{S_F} 溢出逻辑=(SA⊕SF)(SB⊕SF)=SA SB SF+SA SB SF -
最高位和符号位的进位判断
设符号位的进位为 C f C_f Cf ,尾数最高位的进位为 C C C
那么 溢出逻辑 = C f ⊕ C 溢出逻辑=C_f⊕C 溢出逻辑=Cf⊕C
【例】
-
双符号位判断
双符号位:用00表示正,11表示负,如果计算结果的符号位是01或10,则表示发生了溢出,其中01表示发生了正溢,10表示发生了负溢
【例】
定点数乘法运算
乘法运算由累加和右移操作实现
原码一位乘法
可以看 原码乘法运算 一位乘 计组 讲的挺清楚的
用原码实现乘法运算时,符号位与数值位分开计算:
- 确定乘积的符号:由两个乘数的符号异或得到
- 计算乘积的数值位:乘积的数值部分为两个乘数的数值部分值积
【例】
补码一位乘法(Booth-比较法)
设 [ X ] 补 = x s x 1 x 2 … x n [X]补=x_sx_1x_2…x_n [X]补=xsx1x2…xn 和 [ Y ] 补 = y s y 1 y 2 … y n [Y]补=y_sy_1y_2…y_n [Y]补=ysy1y2…yn,则运算规则如下:
- 符号位参与运算,运算的数均以补码表示;
- 被乘数和部分积一般取双符号位参与运算,乘数可取单符号位;
- 乘数末位增设附加位 y n + 1 y_n+1 yn+1 ,且初值为 0;
- 根据 y n y_n yn 和 y n + 1 y_n+1 yn+1 的取值来确定操作;
- 移位按补码右移规则进行;
- 按照上述算法进行 n+1 步操作,第 n+1 步不再移位
上面的内容简单理解一下然后看 补码的乘法 补码一位乘 计组 应该就清楚了