目录
6.4.1 浮点加减运算
6.1 无符号数和有符号数
- 在计算机中参与运算的数有两大类:无符号数和有符号数。
6.1.1 无符号数
- 所谓无符号数,即没有符号的数,在寄存器中的每一位均可用来存放数值。
- 寄存器的位数反映无符号数的表示范围。
- 寄存器的位数通常也称为机器字长。
6.1.2 有符号数
1、机器数与真值:
- 真值:带正负号的数
- 机器数:符号数字化的数(用”0“表示“正”,用”1“表示“负”)
- 小数:
- 整数:
- 小数:
2、原码表示法:
- 原码表示简单明了,并易于和真值转换。
- 符号位为0表示正数,符号位为1表示负数。数值位即真值的绝对值。
- 原码表示又称为带符号的绝对值表示。
- 为了书写方便以及区别整数和小数,整数的符号位和数值位之间用逗号隔开;小数的符号位和数值位之间用小数点隔开。
- 原码中的“零”有两种表示形式。
3、反码表示法:
- 正数:原码 = 反码
- 负数:反码可用原码除符号位外每位取反求得。
- 原码中的“零”有两种表示形式。
4、补码表示法:
- 引入补码的概念是为了消除减法运算。
- 一个负数加上“模”即得该负数的补数。
- 一个正数和一个负数互为补数时,它们绝对值之和即为模数。
- 正数的补数为其本身。
- 变形补码:双符号位的补码。
- 当真值为正时:原码 = 反码 = 补码
- 当真值为负时,补码可用原码除符号位外每位取反,末位加1求得。
- 当真值为负时,原码可用补码除符号位外每位取反,末位加1求得。
- 【y】补连同符号位在内,每位取反,末位加1即得【-y】补。
- 补码中的“零”只有一种表示形式。
5、移码表示法:
- 同一个真值的补码与移码只差一个符号位。
- 用移码表示浮点数的阶码,能方便地判断浮点数的阶码大小。
- 补码中的“零”只有一种表示形式。
6.2 数的定点表示和浮点表示
6.2.1 定点表示
- 没有任何硬件可以用来标识小数点的位置。
- 定点机:采用定点数的机器
- 定点数:纯整数、纯小数
6.2.2 浮点表示
- 浮点数即小数点的位置可以浮动的数。
- 为了提高数据精度以及便于浮点数的比较,在计算机中规定浮点数的尾数用纯小数形式,将尾数最高位为1的浮点数称为规格化数。
- 浮点数表示成规格化形式后,其精度最高。
1、浮点数的表示形式:
- 浮点数由阶码j和尾数S两部分组成。
- 阶码是整数,阶符和阶码的位数m合起来反映浮点数的表示范围,以及小数点的实际位置。
- 尾数是小数:其位数n反映了浮点数的精度。
- 尾数的符号代表浮点数的正负。
- 计算机中浮点数的阶码和尾数可以采用同一种机器数表示,也可以采用不同的机器数表示。
2、浮点数的表示范围:
- 上溢:阶码 > 最大阶码
- 下溢:阶码 < 最小阶码 按机器零处理
3、浮点数的规格化形式
- r = 2:尾数最高位为1
- r = 4:尾数最高2位不全为0
- r = 8:尾数最高8位不全为0
- 基数不同,浮点数的规格化形式不同。
4、浮点数规格化:
- r = 2:
- 左规:尾数左移1位,阶码减1
- 右规:尾数右移1位,阶码加1
- r = 4:
- 左规:尾数左移2位,阶码减1
- 右规:尾数右移2位,阶码加1
- r = 8:
- 左规:尾数左移3位,阶码减1
- 右规:尾数右移3位,阶码加1
- 基数r越大,可表示的浮点数的范围越大。
- 基数r越大,浮点数的精度降低。
notes:机器零:
- 当浮点数尾数为0时,不论其阶码为何值,按机器零处理。
- 当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理。
6.2.3 IEEE 754标准
- S为数符,它表示浮点数的正负。
- 阶码用移码表示,尾数用原码表示。
6.3 定点运算
6.3.1 移位运算
- 在计算机中,移位与加减配合,能够实现乘除运算。
1、算数移位:
- 对有符号数的移位称为算数移位。
- 算术移位的规则:符号位不变
- 算术移位的硬件实现:
2、逻辑移位:
- 对无符号数的移位称为逻辑移位。
- 逻辑左移:低位添0,高位移丢
- 逻辑右移:高位添0,低位移丢
6.3.2 加法和减法运算
- 减法运算可以看作被减数加上一个减数的负值。
- 现代计算机中都采用补码作加减法运算。
1、补码加减运算的基本公式:
- 连同符号位一起相加,符号位产生的进位自然丢掉。
2、溢出判断:
- 一位符号位判溢出:
- 符号不同的两个数相加是不会溢出的。
- 符号相同的两个数相减是不会溢出的。
- 参加操作的两个数符号相同,其结果的符号与原操作数的符号不同,即为溢出。
- 硬件实现:最高有效位的进位 异或 符号位的进位 = 1 ——> 溢出
- 两位符号位判溢出:
- 结果的双符号位相同 未溢出
- 结果的双符号位不同 溢出
- 最高符号位代表其真正的符号
6.3.3 乘法运算
1、笔算乘法:
- 乘积的符号心算求得
- 乘法运算可用加和移位实现(先加法后移位)
- 由乘数的末位决定被乘数是否与原部分积相加,然后右移一位形成新的部分积,同时乘数右移一位(末位移丢),空出高位存放部分积的低位。
- 被乘数只与部分积的高位相加。
2、原码的一位乘法运算:
- 乘积的符号位单独处理。
- 乘积的符号位由两原码符号位异或运算结果决定。
- 数值部分为绝对值相乘。
- 特点:
- 绝对值运算
- 用移位的次数判断乘法是否结束
- 逻辑移位
3、补码的一位乘法运算:
- 被乘数任意,乘数为正:
- 与原码乘相似,但加和移位按补码规则运算,乘积的符号自然形成。
- 被乘数任意,乘数为负:
- 乘数【y】补,去掉符号位
- 与原码乘相似,但加和移位按补码规则运算,乘积的符号自然形成。
- 最后加【-x】补校正
- Booth算法(被乘数、乘数符号任意):
- 符号位参与运算,每次移位是补码的“算数右移”
- 符号位不动,数值位右移,正数右移补0,负数右移补1(符号位是啥就补啥)
- 辅助位 - MQ中最低位 = 1时,【ACC】+【X】补
- 辅助位 - MQ中最低位 = 0时,【ACC】+ 0
- 辅助位 - MQ中最低位 = -1时,【ACC】+【-X】补
- 一般来说,Booth算法的被乘数、部分积采用双符号位补码。
- 符号位参与运算,每次移位是补码的“算数右移”
乘法小结:
- 整数乘法与小数乘法过程完全相同,可用逗号代替小数点。
- 原码乘 符号位单独处理
- 补码乘 符号位自然形成
- 原码乘去掉符号位运算,即为无符号数乘法。
6.3.4 除法运算
1、笔算除法:
- 商符单独处理、心算求得。
2、原码除法:
- 商的符号位单独处理
- 数值部分为绝对值相除
- 约定:
- 小数定点除法:x* < y*
- 整数定点除法:x* > y*
- 被除数不等于0
- 除数不能为0
- 恢复余数法:
- 余数为正,上商1,逻辑左移
- 余数为负,上商0,恢复余数,逻辑左移
- 不恢复余数法:
- 不恢复余数法又称为加减交替法、
- 用移位的次数判断除法是否结束。
6.4 浮点运算
6.4.1 浮点加减运算
- 首先写出x,y在计算机中的补码表示。
- 对阶:
- 使两个操作数的小数点位置对齐,即使两数的阶码相等。
- 先求阶差,再按小阶向大阶看齐的原则,对阶。
- 尾数求和:
- 规格化:
- 当尾数的最高数值位与符号位不同时,即为规格化形式。
- 有溢出:右规
- 未溢出:左规
- 舍人