浮点数的加减运算(阶码、尾数)
加减符号浮点数尾数运算 < ---- > 原码加/减运算
原码:+|x| 或者 -|x| (正数=0+|x| 负数的=1+|x| )
符号位和数值部分:分开处理
仅对【数值部分】进⾏加减运算,符号位起判断和控制作⽤
规则如下:
•⽐较两数符号,对加法实⾏“同号求和,异号求差”,对减法实⾏“异号求和,同号求差”。
•求和:数值位相加,和的符号取被加数(被减数)的符号。若最⾼位产⽣进位,则结果溢出。
•求差:被加数(被减数)与加数(减数)求补相加。
a)最⾼数值位产⽣进位表明加法结果为正,所得数值位正确。
b)最⾼数值位没产⽣进位表明加法结果为负,得到的是数值位的补码形式,需对结果求补,还原为绝对值形式的数值位。•差的符号位:a)情况下,符号位取被加数(被减数)的符号;
b)情况下,符号位为被加数(被减数)的符号取反。
举个栗⼦:~
例1:已知 [X]原 = 1.0011,[Y]原 = 1.1010,要求计算[X+Y]原
解:由原码加减运算规则知:同号相加,则求和,和的符号同被加数符号。
所以:和的数值位为:0011 + 1010 = 1101 (ALU中⽆符号数相加)
和的符号位为:1
[X+Y]原= 1.1101 求和:直接加,有进位则溢出,符号同被加数
例2 :已知 [X]原 = 1.0011,[Y]原 = 1.1010,要求计算[X–Y]原
解:由原码加减运算规则知:同号相减,则求差(补码减法)
差的数值位为:0011+(1010)求补= 0011 + 0110 = 1001
最⾼数值位没有产⽣进位,表明加法结果为负,需对1001求补,还
原为绝对值形式的数值位。即:(1001)求补= 0111
差的符号位为[X]原的符号位取反,即:0
[X–Y]原= 0.0111 求差:加补码,不会溢出,符号分情况
浮点数阶码运算 < ---- > 移码加/减运算
移码:不管正负,只要将其补码的符号位取反即可。
符号位和数值部分:⼀起处理
运算公式(假定在⼀个n位ALU中进⾏加法运算)
[E1]移+[E2]移=2n-1+E1+2n-1+E2=2n+E1+E2=[E1+E2]补(mod 2n)
[E1]移–[E2]移=[E1]移+[–[E2]移]补=2n-1+E1+2n–[E2]移
=2n-1+E1+2n–2n-1–E2
= 2n+E1–E2 = [E1–E2]补(mod 2n)
结论:移码的和、差等于和、差的补码!
运算规则
①加法:直接将[E1]移和[E2]移进⾏模2n加,然后对结果的符号取反。
②减法:先将减数[E2]移求补(各位取反,末位加1),然后再与被减数 [E1]移进⾏模2n相加,最后对结果的符号取反。
③溢出判断:进⾏模2n相加时,如果两个加数的符号相同,并且与和数的符号也相同,则发⽣溢出。
例1:⽤四位移码计算“–7+(– 6)”和“–3 + 6”的值。
解:[–7]移= 0001 [– 6]移= 0010 [–3]移= 0101 [6]移= 1110
[–7]移+ [–6]移= 0001 + 0010 = 0011 (两个加数与结果符号都为0,溢出)
[–3]移+ [6]移= 0101 + 1110 = 0011,符号取反后为 1011,其真值为+3
问题:[–7+(–6)]移=? [–3+(6)]移=?
例2:⽤四位移码计算“–7 –(– 6)”和“–3 – 5”的值。
解:[–7]移= 0001 [– 6]移= 0010 [–3]移= 0101 [5]移= 1101
[–7]移– [–6]移= 0001 + 1110 = 1111,符号取反后为 0111,其真值为–1。
[–3]移– [5]移= 0101 + 0011 = 1000,符号取反后为 0000,其真值为– 8。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论