第6章 计算机的运算方法 6.1 无符号数和有符号数 6.2 数的定点表示和浮点表示 6.3 定点运算 6.4 浮点四则运算

Slides:



Advertisements
Similar presentations
“ 上海市科研计划课题预算编制 ” 网上教程 上海市科委条财处. 经费预算表 表 1 劳务费预算明细表 表 2 购置设备预算明细表 表 3 试制设备预算明细表 表 4 材料费预算明细表 表 5 测试化验与加工费预算明细表 表 6 现有仪器设备使用费预算明细表 小于等于 20 万的项目,表 2 ~表.
Advertisements

人的性别遗传 合肥市第四十九中学 丁 艳. 男女成对染色体排序图 1 、男性和女性各 23 对染色体有何异同 ? 哪 一对被称为性染色体 ? 2 、这两幅图中,哪幅 图显示的是男性的染色 体?哪幅图显示的是女 性染色体? 3 、图中哪条染色体是 Y 染色体?它与 X 染色体 在形态上的主要区别是.
XX啤酒营销及广告策略.
損益表 原則: 收益與費用的計算,實際上是在實現或發生時所產生,與現金收付當時無關。
第十五章 控制方法.
1、一般地说,在生物的体细胞中, 和 都是成对存在的。
辨性别 A B. 辨性别 A B 第三节人类染色体与性别决定 昌邑市龙池初中 杨伟红 学习目标 1.理解人的染色体组成和传递规律。 2.解释人类性别决定的原理。 3.通过探究活动,解读数据了解生男生女的比例。
这是一个数字的 乐园 这里埋藏着丰富的 宝藏 请跟我一起走进数学的 殿堂.
第四章 组合逻辑电路 第 四 章 组 合 逻 辑 电 路.
发展党员的流程和要求 党委组织部 萧炽成.
南京市国税局国际税务管理处 二00九年二月二十四日
4.3 磁場內的載電流導體 電池車 作用於載電流導體的力 進度評估 5 進度評估 6 應用:電動機 進度評估 7
地方教育發展基金執行實務 王麗真、江明君、魏珮如 1.
莫让情感之船过早靠岸 兴庆回中 赵莉.
行政公文写作 第七章 2004年8月 行政公文写作.

如何开好通表会 荔湾区教育局第二期学生团干培训 2009年9月 1.
一元一次方程的应用 行程问题.
第九章 求职礼仪 本章从求职者的应聘资料准备、个人形象设计、言谈举止、应试技艺等方面作如下介绍。 求职前的准备: 一、知已知彼,有的放矢
跳楼价 亏本大甩卖 清仓处理 买一送一 5折酬宾. 跳楼价 亏本大甩卖 清仓处理 买一送一 5折酬宾.
清仓处理 跳楼价 满200返160 5折酬宾.
第三章  电话、电子通讯   本章重难点:     打电话的方法、         接听电话的方法。
第四节 重积分的应用 一、平面区域的面积 二、立体体积 三、曲面的面积 四、物体的质量 五、物体的质心 六、物体的转动惯量 七、物体的引力
致亲爱的同学们 天空的幸福是穿一身蓝 森林的幸福是披一身绿 阳光的幸福是如钻石般耀眼 老师的幸福是因为认识了你们 愿你们努力进取,永不言败.
1.1.2 四 种 命 题.
普通物理实验 绪论 数据处理 课件下载: 俞熹
增值评价 2014级 初中起点报告 解读培训 辽宁省基础教育质量监测与评价中心.
色 弱 與 色 盲.
中径花岗岩锯片的设计制备与切割 贾鹏飞 2014年8月.
世上孩子都是宝, 男孩女孩都一样。.
宠物之家 我的宠物性别? 雌(♀) or 雄(♂) 第一阶段:我的宠物我做主 第二阶段:宠物“相亲记” 第三阶段:家族诞生
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
北师大版七年级数学 5.5 应用一元一次方程 ——“希望工程”义演 枣庄市第三十四中学 曹馨.
海洋存亡 匹夫有责 ——让我们都来做环保小卫士 XX小学三(3)班.
第8章 回归分析 本章教学目标: 了解回归分析在经济与管理中的广泛应用; 掌握回归分析的基本概念、基本原理及其分析应用的基本步骤;
機車第六篇 事故預防 單元二 行駛中注意事項.
第11周 工作计划.
数字电子技术基础 信息科学与工程学院·基础电子教研室.
版权所有,引用请注明出处 第三章、运算方法与运算器 原著 谭志虎 主讲(改编) 蒋文斌.
吉林大学远程教育课件 数 字 逻 辑 (第十九讲) 主讲人 : 魏 达 学 时:48.
例1.设 求AB..
第七章 差分方程模型 7.1 市场经济中的蛛网模型 7.2 减肥计划——节食与运动 7.3 差分形式的阻滞增长模型
寫作評估 實用文寫作講解 1.
桶式移位器 简单浮点编码器 双优先级编码器 级联比较器 关模比较器
导数及其应用 高三数学组 葛乃兵.
多項式方程式 網頁設計規劃書 第四組 蔡瑋倫,吳柏萱,張哲誌.
computer organization principle
二元一次聯立方程式 代入消去法 加減消去法 自我評量.
判別下列何者是 x 的多項式。以「○」表示是x的多項式,「×」表示不是 x的多項式 :
统筹安排   成本最低.
7.1 逻辑代数与门电路 逻辑代数初步 1. 数字电路中的数制和码制 (1) 数制及其转换
公 共 关 系 主编:谢苏.
组合逻辑电路 ——中规模组合逻辑集成电路.
7.4解一元一次不等式(1).
统筹安排   成本最低.
课前注意 课前注意 大家好!欢迎加入0118班! 请注意以下几点: 1.服务:卡顿、听不清声音、看不见ppt—管家( ) 2.课堂秩序:公共课堂,勿谈与课堂无关或消极的话题。 3.答疑:上课听讲,课后答疑,微信留言。 4.联系方式:提示老师手机/微信: QQ:
內部控制作業之訂定與執行 報告人:許嘉琳 日 期:
第3章 多维随机向量及其分布 3.1 随机向量及其联合分布函数 3.2 二维离散型随机向量 3.3 二维连续型随机向量
C ( )下圖有 4 個邊長為 x 的正方形,4 個 長為 x、寬為 1 的長方形,以及 1 個 邊長為1 的正方形,則這 9 個圖形的
两个变量的线性相关 琼海市嘉积中学 梅小青.
(5) (-5x)(-7x+2) =__________ (6) 7x(5x2+6x-3) = _______________ -27x2
数学题解答 第二章 一元一次方程 2.1从算式到方程 (第1课时) 数学题解答
线性回归.
小梅到麵包店為全家買麵包和果汁當早餐,已知麵包一個25元,果汁一瓶18元;
第八章 服務部門成本分攤.
12.2提公因式法.
第六章 异步时序电路的分析与设计 6.1    脉冲异步时序电路概述 6.2 脉冲异步时序电路的分析 6.3 脉冲异步时序电路的设计.
統計網路學習館 線性迴歸.
幂的乘方.
在下列空格中,填入適當的式子: (1)(-3x)‧9x=__________ -27x2 (2)(3x2)2 =__________
Presentation transcript:

第6章 计算机的运算方法 6.1 无符号数和有符号数 6.2 数的定点表示和浮点表示 6.3 定点运算 6.4 浮点四则运算 第6章 计算机的运算方法 6.1 无符号数和有符号数 6.2 数的定点表示和浮点表示 6.3 定点运算 6.4 浮点四则运算 6.5 算术逻辑单元

6.1 无符号数和有符号数 一、无符号数 寄存器的位数 反映无符号数的表示范围 8 位 8 位无符号数能表示的数据范围是 0 ~ 255 6.1 无符号数和有符号数 一、无符号数 寄存器的位数 反映无符号数的表示范围 8 位 8 位无符号数能表示的数据范围是 0 ~ 255 16 位 16 位无符号数能表示的数据范围是 0 ~ 65535

6.1 二、有符号数 1. 机器数与真值 真值:一般书写的数 机器数:机器中表示的数,要解决在计算机内部数的正、负符号和小数点运算问题。 原码 反码 补码 移码

真值 机器数 带符号的数 符号数字化的数 0 1011 + 0.1011 1 1011 – 0.1011 0 1100 + 1100 真值 机器数 带符号的数 符号数字化的数 + 0.1011 0 1011 小数点的位置 – 0.1011 1 1011 小数点的位置 + 1100 0 1100 小数点的位置 – 1100 1 1100 小数点的位置

6.1 2. 原码表示法 (1) 定义 0,x 2n > x ≥ 0 [x]原 = 2n - x 0 ≥ x > -2n 整数 x 为真值 n 为整数的位数 正号 如 x = +1110 [x]原 = 0 , 1110 用 逗号 将符号位 和数值部分隔开 负号 x = 1110 [x]原 = 24 + 1110 = 1 , 1110

续上 0,x 1 > x ≥ 0 [x]原 = 1 - x 0 ≥ x > -1 = 1 + | x | 小数 x 为真值 如 正号 用 小数点 将符号位和数值部分隔开 负号 x = - 0.1110 [x]原 = 1 + 0.1110 = 1 . 1110

6.1 (2) 举例 例 6.1 已知 [x]原 = 1 . 0011 求 x 解: 由定义得 小数点, 说明是小数 例 6.1 已知 [x]原 = 1 . 0011 求 x 解: 由定义得 x = 1 [x]原 = 1 1.0011 = 0.0011 逗号, 说明是整数 例 6.2 已知 [x]原 = 1 , 1100 求 x 解: 由定义得 x = 24 [x]原 = 10000 1,1100 = 1100

6.1 例 6.3 已知 [x]原 = 0.1101 求 x 解: 根据 定义 ∵ [x]原 = 0.1101 ∴ x = + 0.1101 解: 设 x = + 0.0000 [+ 0.0000]原 = 0.0000 x = 0.0000 [ 0.0000]原 = 1.0000 同理,对于整数 [+ 0 ]原 = 0,0000 [ 0 ]原 = 1,0000 ∴ [+ 0]原 ≠ [ 0]原

6.1 原码的特点: 简单、直观 但是用原码作加法时,会出现如下问题: 要求 数1 数2 实际操作 结果符号 能否 只作加法 ? 要求 数1 数2 实际操作 结果符号 加法 正 正 加 正 加法 正 负 减 可正可负 加法 负 正 减 可正可负 加法 负 负 加 负 能否 只作加法 ? 找到一个与负数等价的正数 来代替这个负数 就可使 减 加

6.1 3. 补码表示法 (1) 补的概念 时钟 逆时针 顺时针 + 9 6 15 - 3 6 3 - 12 3 可见 3 可用 + 9 代替 减法 加法 称 + 9 是 3 以 12 为模的 补数 记作 3 ≡ + 9 (mod 12) 时钟以 12为模 同理 4 ≡ + 8 (mod 12) 5 ≡ + 7 (mod 12)

结论 6.1 一个负数加上 “模” 即得该负数的补数 一个正数和一个负数互为补数时 它们绝对值之和即为 模 数 计数器(模 16) 1011 0000 ? 1011 1011 – 1011 + 0101 0000 10000 模16, 自然去掉 可见 1011 可用 + 0101 代替 记作 1011 (mod 24) ≡ + 0101 同理 011 ≡ + 101 (mod 23) 0.1001 ≡ + 1.0111 (mod 2)

6.1 ? ? (2) 正数的补数即为其本身 + 0101(mod24) ≡ 1011 (mod24) + 10000 + 0101 两个互为补数的数 (mod24) 分别加上模 + 10000 + 0101 + 10101 ≡ 结果仍互为补数 丢掉 ∴ + 0101 ≡ + 0101 (mod24) 可见 + 0101 + 0101 ? 1011 ? 0 , 0101 + 0101 1 , 0101 1011 24+1 – 1011 = 100000 (mod24+1) 1011 用 逗号 将符号位 和数值部分隔开 1,0101

6.1 (3) 补码定义 整数 [x]补 = 0,x 2n >x ≥ 0 2n+1 + x 0 >x ≥ 2n(mod 2n+1) 如 x = +1010 x = 1011000 [x]补 = 0,1010 [x]补 = 27+1 +( 1011000 ) = 100000000 1011000 用 逗号 将符号位 和数值部分隔开 1,0101000

6.1 x 1>x ≥ 0 [x]补 = 2 + x 0>x ≥ 1(mod 2) = 2 - | x | 小数 x 为真值 如 0.1100000 10.0000000 = 1.0100000 用 小数点 将符号位 和数值部分隔开

6.1 (4) 求补码的快捷方式 设 x = 1010 时 则[x]补 = 24+1 1010 = 11111 + 1 1010 = 11111 + 1 1010 = 100000 = 11111 1010 + 1 1010 = 1,0110 10101 + 1 数值位取反 = 1,0110 又[x]原 = 1,1010 当真值为 负 时,补码 可用 原码除符号位外 每位取反,末位加 1 求得 由原码求补码的另外一种快捷方式:当原码为负数时,其补码是:自右向左,右边的第一个1及其右侧的0保持不变,其余数值位取反,符号位不动。

6.1 (5) 举例 例 6.5 已知 [x]补 = 0.0001,求 x 解: 由定义得 x = + 0.0001 解:由定义得 x = [x]补 – 2 = 1.0001 – 10.0000 = – (10.0000 – 1.0001) = 0.1111 –

6.1 例 6.7 已知 [x]补 = 1,1110,求 x 解: 由定义得 x = [x]补 – 24+1 = 1,1110 – 100000 = 0010  [x]原 = 1,0010 当真值为 负 时,原码 可用 补码除符号位外 每位取反,末位加 1 求得

6.1 练习 求下列真值的补码 [x]补 [x]原 真值 x = +70 x = 0.1110 x = 0.0000 x = 70 = 1000110 0, 1000110 0,1000110 = 1000110 1, 0111010 1,1000110 0.1110 0.1110 1.0010 1.1110 [+ 0]补 = [ 0]补 0.0000 0.0000 0.0000 1.0000 1.0000 不能表示 [x]补 = x 1 > x ≥ 0 2+ x 0 > x ≥ 1(mod 2) 由小数补码定义 [ 1]补 = 2 + x = 10.0000 1.0000 = 1.0000

4. 反码表示法 6.1 (1) 定义 根据补码定义: [x]补 = 2n+1 + x 于是可知: [x]反 = [x]补 – 1 整数 [x]反 = 0,x 2n > x ≥ 0 ( 2n+1 – 1) + x 0 ≥ x > -2n(mod 2n+1 1) x 为真值 n 为整数的位数 如 x = +1101 x = 1101 [x]反 = 0,1101 [x]反 = (24+1 1) 1101 = 11111 1101 用 逗号 将符号位 和数值部分隔开 = 1,0010

6.1 小数 x = + 0.1101 x = 0.1010 [x]反 = 0.1101 [x]反 = (2 2-4) 0.1010 ( 2 – 2-n) + x 0 ≥ x > 1(mod 2 2-n) x 为真值 n 为小数的位数 如 x = + 0.1101 x = 0.1010 [x]反 = 0.1101 [x]反 = (2 2-4) 0.1010 = 1.1111 0.1010 用 小数点 将符号位 和数值部分隔开 = 1.0101

6.1 (2) 举例 例6.8 已知 [x]反 = 0,1110 求 x 解: 由定义得 x = + 1110 = 1,1110 11111 = 0001 例 6.10 求 0 的反码 解: 设 x = + 0.0000 [+0.0000]反= 0.0000 x = 0.0000 [ 0.0000]反= 1.1111 同理,对于整数 [+0]反= 0,0000 [ 0]反= 1,1111 ∴ [+ 0]反 ≠ [ 0]反

6.1 三种机器数的小结 最高位为符号位,书写上用“,”(整数) 或“.”(小数)将数值部分和符号位隔开 对于正数,原码 = 补码 = 反码 对于负数 ,符号位为 1,其 数值部分 原码除符号位外每位取反末位加 1 补码 原码除符号位外每位取反 反码

6.1 例6.11 设机器数字长为 8 位(其中1位为符号位) 对于整数,当其分别代表无符号数、原码、补码和 反码时,对应的真值范围各为多少? 二进制代码 无符号数 对应的真值 原码对应 的真值 补码对应 反码对应 00000000 00000001 00000010 … 01111111 10000000 10000001 11111101 11111110 11111111 1 2 127 … +0 +1 +2 +127 … +0 +1 +2 +127 … +0 +0 +1 +2 +127 … 128 129 -0 -128 -127 -1 -127 -126 253 254 255 … -125 -126 -127 … … -2 -1 -0 … -3 -2 -1

6.1 5. 移码表示法 补码表示很难直接判断其真值大小 如 十进制 二进制 补码 x = +21 x = –21 x = +31 +10101 0,10101 错 大 – 10101 1,01011 +11111 0,11111 错 大 – 11111 1,00001 如果 x + 25 +10101 + 100000 = 110101 大 正确 10101 + 100000 = 001011 +11111 + 100000 = 111111 大 正确 11111 + 100000 = 000001

6.1 (1) 移码定义 [x]移 = 2n + x(2n>x ≥ 2n) x 为真值,n 为 整数的位数 移码在数轴上的表示 如 真值 如 x = +10100 [x]移 = 25 + 10100 = 1,10100 用 逗号 将符号位 和数值部分隔开 x = –10100 [x]移 = 25 – 10100 = 0,01100

6.1 (2) 移码和补码的比较 设 x = +1100100 [x]移 = 27 + 1100100 = 1,1100100 1 设 x = –1100100 [x]移 = 27 – 1100100 = 0,0011100 [x]补 = 1,0011100 1 补码与移码的数值部分相同,符号位相反

6.1 (3) 真值、补码和移码的对照表 [x]补 [x]移 真值 x ( n = 5 ) - 1 0 0 0 0 0 十进制整数 - 1 0 0 0 0 0 - 1 1 1 1 1 - 1 1 1 1 0 - 0 0 0 0 1 ± 0 0 0 0 0 + 0 0 0 0 1 + 0 0 0 1 0 + 1 1 1 1 0 + 1 1 1 1 1 … - 1 0 0 0 0 0 … 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 … 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 … 1 2 31 32 33 34 62 63 ± 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 + 1 1 1 1 1 1 1 1 1 1 1

6.1 (4) 移码的特点 当 x = 0 时 [+0]移 = 25 + 0 = 1,00000 [ 0]移 = 25 0 [ 0]移 = 25 0 = 1,00000 ∴ [+0]移 = [ 0]移 当 n = 5 时 最小的真值为 25 = 100000 [ 100000]移 = 25 100000 = 000000 可见,最小真值的移码为全 0 用移码表示浮点数的阶码 能方便地判断浮点数的阶码大小

各种码制、真值之间的转换关系图: 反码 补码 原码 真值 移码

需要记住的一些法则: (1)对于正数,其原码、反码、补码相同 (2)负数的原码反码:符号位不变,数值位 取反 (3)负数的原码补码:数值位自右向左,最 右边的第1个“1”和其右侧的“0”不动,其左 侧的数值位全部取反,符号位保持不变 (4)负数的补码反码:符号位不变,数值位 减 1

(5)负数的补码原码:符号位不变,数值位 自右向左,最右侧的 1 和其右侧的 0 不变, 其左侧的数值位取反 (6)负数的补码移码:符号位取反,数值位 不动 (7)原码、反码的“0”有正零和负零之分,补 码、移码的“0”都只有一种表示法 (8)补码的负数表示范围比原码和反码多一个 数, 例如1个8位的机器数(含一位符号位) (9)不论正数或负数的[x]补[-x]补:符号位连 同数值位一起取反,末位加 1

6.2 数的定点表示和浮点表示 计算机常用的数据表示格式有两种: 定点表示:小数点位置固定 浮点表示:小数点位置不固定 6.2 数的定点表示和浮点表示 计算机常用的数据表示格式有两种: 定点表示:小数点位置固定 浮点表示:小数点位置不固定 定点表示法——所有数的小数点位置固定不变 纯小数 纯整数

小数点固定于符号位之后,不需专门存放位置 1、定点纯小数 x0 x1 x2 x3 … xn-1 xn 数值部分 符号 小数点固定于符号位之后,不需专门存放位置 数的表示范围是 0 ≤ |x| ≤ 1-2-n

定点纯小数的表示范围: x = 0.00...00 x = 1.00...00 x = 0 正0和负0都是0 x = 0.11...11 x = 1-2-n   最大正数 x = 0.00...01 x = 2-n  最接近0的正数 x = 1.00...01  x = -2-n 最接近0的负数 x = 1.11...11  x = -(1-2-n) 最小负数

小数点固定于最后一位之后,不需专门存放位置 2、定点纯整数 x0 x1 x2 x3 … xn-1 xn 符号 数值部分 小数点固定于最后一位之后,不需专门存放位置 数的表示范围是 0 ≤ |x| ≤ 2n -1

定点纯整数的表示范围: x = 000...00 x = 100...00 x = 0 正0和负0都是0 x = 011...11 x = 2n -1    最大正数 x = 000...01 x = 1  最接近0的正数 x = 100...01  x = -1 最接近0的负数 x = 111...11  x = -(2n -1) 最小负数

3、定点表示法的特点 定点数表示数的范围受字长限制,表示数的范围有限; 定点表示的精度有限 机器中,常用定点纯整数表示; 如果用定点表示,如何表示实数(包括小数和整数)呢? -------引入浮点

6.2 二、浮点表示 N = S×r j 计算机中 r 取 2、4、8、16 等 N = 11.0101 当 r = 2 浮点数的一般形式 S 尾数 j 阶码 r 基数(基值) 计算机中 r 取 2、4、8、16 等 N = 11.0101 二进制表示 当 r = 2 = 0.110101×210 规格化数 = 1.10101×21 = 1101.01×2-10 = 0.00110101×2100 计算机中 S 小数、可正可负 j 整数、可正可负

6.2 1. 浮点数的表示形式 … jf j1 j2 jm Sf S1 S2 Sn Sf 代表浮点数的符号 n 其位数反映浮点数的精度 阶符 数符 阶码的 数值部分 尾数的数值部分 小数点位置 Sf 代表浮点数的符号 n 其位数反映浮点数的精度 m 其位数反映浮点数的表示范围 jf 和 m 共同表示小数点的实际位置

2. 浮点数的表示范围 最大正数 2(2 - 1) ×(1 – 2-n) 最小正数 2-(2 - 1) × 2-n m m 最小正数 2-(2 - 1) × 2-n m 最大负数 –2-(2 - 1) × 2-n m 最小负数 – 2(2 - 1) ×(1 – 2-n)

6.2 2. 浮点数的表示范围 –215 ×( 1 – 2-10) –2-15 ×2-10 上溢 阶码 > 最大阶码 上溢 阶码 > 最大阶码 下溢 阶码 < 最小阶码 按 机器零 处理 负数区 正数区 下溢 上溢 最小负数 最大负数 最小正数 最大正数 –2( 2m–1)×( 1 – 2–n) 2( 2m–1)×( 1 – 2–n) –215 ×( 1 – 2-10) 215 ×( 1 – 2-10) 2–( 2m–1)×2–n 2-15 ×2-10 设 m = 4 n =10 –2–( 2m–1)×2–n –2-15 ×2-10

【例1】设机器数字长为 24 位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各 取1 位外,阶码、尾数各取几位? 【分析】浮点数的阶码决定数的表示范围,尾数决定 数的精度,本题应首先考虑数的范围——±3万 解: 215 = 32768 214 = 16384 ∵ 216 = 65536 15 位二进制数可反映 ±3 万之间的十进制数 ∴ 215 × 0.×××     ××× 15位 … … m = 4,5,6, 满足 最大精度 可取 阶码 4 位,尾数 18 位

6.2 3. 浮点数的规格化形式 4. 浮点数的规格化 尾数最高位为 1 r = 2 基数不同,浮点数的 规格化形式不同 r = 4 尾数最高 2 位不全为 0 r = 8 尾数最高 3 位不全为 0 4. 浮点数的规格化 r = 2 左规 尾数左移 1 位,阶码减 1 右规 尾数右移 1 位,阶码加 1 r = 4 左规 尾数左移 2 位,阶码减 1 右规 尾数右移 2 位,阶码加 1 r = 8 左规 尾数左移 3 位,阶码减 1 右规 尾数右移 3 位,阶码加 1 基数 r 越大,可表示的浮点数的范围越大 基数 r 越大,浮点数的精度降低

6.2 【例2】 设 m = 4,n = 10,r = 2 尾数没有规格化的浮点数表示范围 最大正数 2+1111 × 0.1111111111 10 个 1 = 215×( 1–2–10 ) 最小正数 2-1111 × 0.0000000001 9 个 0 = 2–15×2–10 = 2–25 最大负数 2-1111 ×(– 0.0000000001) 9 个 0 = –2–15×2–10 = –2–25 最小负数 2+1111 ×(– 0.1111111111) 10 个 1 = –215×( 1–2– 10 )

尾数规格化的浮点数表示范围 即小数点后第一位是 1 最大正数 2+1111 × 0.1111111111 = 215×( 1–2–10 ) 10 个 1 = 215×( 1–2–10 ) 最小正数 2-1111 × 0.1000000000 9 个 0 = 2–15×2–1 = 2–16 最大负数 2-1111 ×(– 0.1000000000) 9 个 0 = –2–15×2–1 = –2–16 最小负数 2+1111 ×(– 0.1111111111) 10 个 1 = –215×( 1–2– 10 )

【例3】 将 + 写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中尾数取11位(含1位数符),阶码取 5 位(含1位阶符)。 13 128 解: 设 x = + 13 128 = + 23 + 22 + 20 27 = +(2-4 + 2-5 + 2-7) 二进制形式 x = 0.0001101000 定点表示 x = 0.0001101000 浮点规格化形式 x = 0.1101000000×2-11 定点机中 [x]原 = [x]补 = [x]反 = 0.0001101000 浮点机中 [x]原 = 1, 0011; 0. 1101000000 [x]补 = 1, 1101; 0. 1101000000 [x]反 = 1, 1100; 0. 1101000000

【例4】将 –54 表示成二进制定点数和浮点数,并写出它在定点机和浮点机中的三种机器数及阶码为移码、尾数为补码的形式(其他要求同上例)。 解: 设 x = –54 = -(25 + 24 + 22 + 21) 二进制形式 x = – 110110 定点表示 x = – 110110 0000 浮点规格化形式 x = – (0.1101100000) × 2110 定点机中 浮点机中 [x]原 = 1, 0000110110 [x]原 = 0, 0110; 1. 1101100000 [x]补 = 1, 1111001010 [x]补 = 0, 0110; 1. 0010100000 [x]反 = 1, 1111001001 [x]反 = 0, 0110; 1. 0010011111 [x]阶移、尾补 = 1, 0110; 1. 0010100000

解: 【例5】写出对应下图所示的浮点数的补码形式。 设 n = 10,m = 4, 阶符、数符各取 1位。 负数区 正数区 下溢 上溢 –2( 2m–1)×( 1 – 2–n) 2( 2m–1)×(1 – 2–n) 2–( 2m–1)×2–n 最小负数 最大正数 最小正数 –2–( 2m–1)×2–n 最大负数 解: 真值 补码 最大正数 215×(1 – 2–10) 0,1111; 0.1111111111 最小正数 2–15× 2–10 1,0001; 0.0000000001 最大负数 –2–15× 2–10 1,0001; 1.1111111111 最小负数 –215×(1 – 2–10) 0,1111; 1.0000000001

6.2 机器零 当浮点数 尾数为 0 时,不论其阶码为何值 按机器零处理 当浮点数 阶码等于或小于它所表示的最小 数 时,不论尾数为何值,按机器零处理 如 m = 4 n = 10 当阶码和尾数都用补码表示时,机器零为 ×, × × × ×; 0. 0 0 0  … 1, 0 0 0 0 ; ×.×× ×  … (阶码 = 16) 当阶码用移码,尾数用补码表示时,机器零为 0, 0 0 0 0;0. 0 0 0  … 有利于机器中“ 判 0 ” 电路的实现

6.2 四、IEEE 754 标准 S 阶码(含阶符) 尾 数 尾数为规格化表示 非 “0” 的有效位最高位为 “1”(隐含) 数符 小数点位置 尾数为规格化表示 非 “0” 的有效位最高位为 “1”(隐含) 符号位 S 阶码 尾数 总位数 短实数 长实数 临时实数 1 8 23 32 1 11 52 64 1 15 64 80

6.3 定 点 运 算 一、移位运算 1. 移位的意义 . 15 m = 1500 cm 小数点右移 2 位 机器用语 6.3 定 点 运 算 一、移位运算 1. 移位的意义 15 m = 1500 cm . 小数点右移 2 位 机器用语 15 相对于小数点 左移 2 位 ( 小数点不动 ) 左移 绝对值扩大 右移 绝对值缩小 在计算机中,移位与加减配合,能够实现乘除运算

6.3 2. 算术移位规则 符号位不变 码 制 添补代码 正数 原码、补码、反码 负数 原 码 补 码 左移 添 0 右移 添 1 反 码 码 制 添补代码 正数 原码、补码、反码 负数 原 码 补 码 左移 添 0 右移 添 1 反 码 1

6.3 例6.16 设机器数字长为 8 位(含1位符号位),写出 A = +26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。 解: A = +26 = +11010 则 [A]原 = [A]补 = [A]反 = 0,0011010 [A]原=[A]补=[A]反 对应的真值 机 器 数 移位操作 移位前 0,0011010 +26 左移一位 0,0110100 + 52 左移两位 0,1101000 +104 右移一位 0,0001101 +13 右移两位 0,0000110 + 6

6.3 例6.17 设机器数字长为 8 位(含1位符号位),写出 A = –26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。 解: A = – 26 = – 11010 原码 对应的真值 机 器 数 移位操作 移位前 1,0011010 – 26 左移一位 1,0110100 – 52 左移两位 1,1101000 – 104 右移一位 1,0001101 – 13 右移两位 1,0000110 – 6

6.3 补码 反码 对应的真值 机 器 数 移位操作 移位前 1,1100110 – 26 左移一位 1,1001100 – 52 左移两位 机 器 数 移位操作 移位前 1,1100110 – 26 左移一位 1,1001100 – 52 左移两位 1,0011000 – 104 右移一位 1,1110011 – 13 右移两位 1,1111001 – 7 反码 对应的真值 机 器 数 移位操作 移位前 1,1100101 – 26 左移一位 1,1001011 – 52 左移两位 1,0010111 – 104 右移一位 1,1110010 – 13 右移两位 1,1111001 – 6

6.3 3. 算术移位的硬件实现 1 (a)真值为正 (b)负数的原码 (c)负数的补码 (d)负数的反码 丢 1 出错 出错 正确 正确 1 (a)真值为正 (b)负数的原码 (c)负数的补码 (d)负数的反码 丢 1 出错 出错 正确 正确 丢 1 影响精度 影响精度 影响精度 正确

6.3 4. 算术移位和逻辑移位的区别 算术移位 有符号数的移位 逻辑移位 无符号数的移位 逻辑左移 低位添 0,高位移丢 逻辑右移 逻辑右移 高位添 0,低位移丢 例如 01010011 10110010 逻辑左移 10100110 逻辑右移 01011001 算术左移 00100110 算术右移 11011001(补码) 高位 1 移丢 Cy 0 1 0 1 0 0 1 1 1 0 1 0 0 1 1 0

二、加减法运算 1. 补码加减运算公式 (1) 加法 整数 [A]补 + [B]补 = [A+B]补(mod 2n+1) 小数 证明 整数 [A]补 + [B]补 = [A+B]补(mod 2n+1) 小数 = [A+B]补(mod 2) 根据补码定义,分 4 种情况证明该式: 情况1:当 A > 0,B > 0 时,则 (A + B) > 0 由补码定义 [A]补 = A,[B]补 = B 则 [A]补 + [B]补= A + B 由于(A + B) > 0,则 [A + B]补 = A + B 因此, [A]补 + [B]补= [A + B]补

续上 情况2:当 A < 0,B < 0 时,(A + B) < 0 由补码定义 [A]补 = M + A (mod M) [B]补 = M + B (mod M) 因此, [A]补+ [B]补 = M + (M +A + B) = M + [A + B]补 = [A + B]补 (mod M) 情况3:当 A > 0,B < 0 时 由补码定义 [A]补 = A [B]补 = M + B (mod M) 有两种可能,即(A+B) ≥ 0 或 (A+B) ≤0

续上 ① 当(A+B) ≥ 0时,M被丢掉,因此: [A]补+ [B]补 = A+M+B = [A+B]补 ② 当(A+B) ≤0时,由补码定义 [A]补+ [B]补 = A+M+B = [A+B]补 (mod M) 情况4:当 A < 0,B > 0 时,与情况3类似,只需 将A、B位置对调即可证明

6.3 二、加减法运算 (2) 减法 从补码减法公式可以看出, 只要求出[-B]补, 就可以变减法为加法。 A–B = A+(–B) 整数 [A – B]补 = [A+(–B)]补 = [A]补 + [ – B]补 (mod 2n+1) 小数 (mod 2) 从补码减法公式可以看出, 只要求出[-B]补, 就可以变减法为加法。 由[B]补求[-B]补的方法是:将[B]补连同符号 位一起求反,末尾加“1”。

6.1 例6.2 已知 [y]补 求[ y]补 解: 由[y]补求[-y]补的方法: [y]补连同符号位在内,每位取反,末位 设 [y]补 = y0. y1 y2 yn … <Ⅰ> [y]补 = 0. y1 y2 yn … y = 0. y1 y2 yn … y = 0. y1 y2 yn … [ y]补 = 1.y1 y2 yn + 2-n … <Ⅱ> [ y]补 = 1. y1 y2 yn … [ y]原 = 1. y1 y2 yn + 2-n … 由[y]补求[-y]补的方法: [y]补连同符号位在内,每位取反,末位 加1,即得[-y]补 y = (0. y1 y2 yn + 2-n) … y = 0. y1 y2 yn + 2-n … [ y]补 = 0. y1 y2 yn + 2-n …

6.3 2. 举例 例 6.18 设 A = 0.1011,B = – 0.0101 求 [A + B]补 解: [A]补 验证 解: [A]补 = 0 . 1 0 1 1 0.1011 + [B]补 = 1 . 1 0 1 1 – 0.0101 0.0110 [A]补 + [B]补 = 1 0 . 0 1 1 0 = [A + B]补 ∴ A + B = 0 . 0 1 1 0 例 6.19 设 A = –9,B = –5 求 [A+B]补 验证 解: [A]补 = 1 , 0 1 1 1 – 1001 + [B]补 = 1 , 1 0 1 1 – 0101 + [A]补 + [B]补 = 1 1 , 0 0 1 0 = [A + B]补 – 1110 ∴ A + B = – 1110

6.3 例 6.20 设机器数字长为 8 位(含 1 位符号位) 且 A = 15, B = 24,用补码求 A – B 解: A = 15 = 0001111 B = 24 = 0011000 [A]补 = 0, 0001111 [B]补 = 0, 0011000 [– B]补 = 1, 1101000 + [A]补 + [– B]补 = 1, 1110111 = [A – B]补 ∴ A – B = – 1001 = –9 练习 1 设 x = y = ,用补码求 x+y 9 16 11 x + y = – 0.1100 = 12 16 – 错 练习 2 设机器数字长为 8 位(含 1 位符号位) 且 A = – 97,B = +41,用补码求 A – B A – B = + 1110110 = + 118 错

6.3 3. 溢出判断 (1) 一位符号位判溢出 参加操作的 两个数(减法时即为被减数和“求补” 以后的减数)符号相同,其结果的符号与原操作 数的符号不同,即为溢出 硬件实现 最高有效位的进位 符号位的进位 = 1 溢出 如 1 0 = 1 0 1 = 1 有 溢出 0 0 = 0 1 1 = 0 无 溢出

6.3 (2) 两位符号位判溢出 [x]补' = x 1 >x ≥ 0 4 + x 0 >x ≥ –1(mod 4) [x]补' + [y]补' = [ x + y ]补' (mod 4) [x –y]补' = [x]补' + [– y]补' (mod 4) 00. ××××× 11. ××××× 00, ××××× 11, ××××× 结果的双符号位 相同 未溢出 结果的双符号位 不同 溢出 10, ××××× 01, ××××× 10. ××××× 01. ××××× 最高符号位 代表其 真正的符号

6.3 4. 补码加减法的硬件配置 加法器(n+1) V 0 A n GA GS 溢出 判断 求补控制 逻 辑 0 X n 逻 辑 0 X n A、X 均 n+1 位 用减法标记 GS 控制求补逻辑

6.3 三、乘法运算 1. 分析笔算乘法 A = – 0.1101 B = 0.1011 A×B = – 0.10001111 乘积的符号心算求得 0 . 1 1 0 1 符号位单独处理 × 0 . 1 0 1 1 1 1 0 1 乘数的某一位决定是否加被乘数 1 1 0 1 ? 4个位积一起相加 0 0 0 0 1 1 0 1 乘积的位数扩大一倍 0 . 1 0 0 0 1 1 1 1

6.3 2. 笔算乘法改进 A • B = A • 0.1011 = 0.1A + 0.00A + 0.001A +0.0001A 右移一位 = 2-1{A +2-1[ 0 • A+2-1(A + 2-1(A+0))]} 第一步 被乘数A + 0 ① 第二步 右移 一 位,得新的部分积 ② 第三步 部分积 + 被乘数 ③ … ⑧ 第八步 右移 一 位,得结果

6.3 3. 改进后的笔算乘法过程(竖式) 部 分 积 乘 数 说 明 0 . 0 0 0 0 1 0 1 1 = 0 . 1 1 0 1 部 分 积 乘 数 说 明 0 . 0 0 0 0 1 0 1 1 = 初态,部分积 = 0 0 . 1 1 0 1 + 乘数为 1,加被乘数 0 . 1 1 0 1 0 . 0 1 1 0 1,形成新的部分积 1 1 0 1 = + 0 . 1 1 0 1 乘数为 1,加被乘数 1 . 0 0 1 1 1 0 . 1 0 0 1 1,形成新的部分积 1 1 1 0 = 0 . 0 0 0 0 乘数为 0,加 0 + 0 . 1 0 0 1 1 1 0 . 0 1 0 0 1,形成新的部分积 1 1 1 1 = 0 . 1 1 0 1 + 乘数为 1,加 被乘数 1 . 0 0 0 1 1 1 1 0 . 1 0 0 0 1 1 1 1 1,得结果

6.3 小结 乘法 运算可用 加和移位实现 n = 4,加 4 次,移 4 次 由乘数的末位决定被乘数是否与原部分积相加, 然后 1 位形成新的部分积,同时 乘数 1 位  (末位移丢),空出高位存放部分积的低位。 被乘数只与部分积的高位相加 硬件 3 个寄存器,具有移位功能 1 个全加器

6.3 4. 原码乘法 (1) 原码一位乘运算规则 以小数为例 设[x]原 = x0. x1x2 xn … [y]原 = y0. y1y2 yn … [x • y]原 = (x0 y0).(0. x1x2 xn)(0.y1y2 yn) … = (x0 y0). x*y* 式中 x*= 0. x1x2 xn 为 x 的绝对值 … y*= 0. y1y2 yn 为 y 的绝对值 … 乘积的符号位单独处理 x0 y0 数值部分为绝对值相乘 x* • y*

6.3 (2) 原码一位乘递推公式 x*• y* = x*(0.y1y2 yn) … = x*(y12-1+y22-2+ + yn2-n) = 2-1(y1x*+2-1(y2x*+ 2-1(ynx* + 0) )) … z0 z1 … zn z0 = 0 z1 = 2-1(ynx*+z0) z2 = 2-1(yn-1x*+z1) zn = 2-1(y1x*+zn-1) …

6.3 例6.21 已知 x = – 0.1110 y = 0.1101 求[x • y]原 解: 数值部分的运算 0 . 0 0 0 0 部 分 积 乘 数 说 明 0 . 0 0 0 0 1 1 0 1 部分积 初态 z0 = 0 = + 0 . 1 1 1 0 + x* 0 . 1 1 1 0 逻辑右移 0 . 0 1 1 1 1,得 z1 0 1 1 0 = + 0 . 0 0 0 0 + 0 0 . 0 1 1 1 逻辑右移 0 . 0 0 1 1 1,得 z2 1 0 1 1 = + 0 . 1 1 1 0 + x* 1 . 0 0 0 1 1 0 逻辑右移 0 . 1 0 0 0 1,得 z3 1 1 0 1 = + 0 . 1 1 1 0 + x* 1 . 0 1 1 0 1 1 0 逻辑右移 0 . 1 0 1 1 0 1 1 0 1,得 z4

6.3 例6.21 结果 ① 乘积的符号位 x0 y0 = 1 0 = 1 ② 数值部分按绝对值相乘 例6.21 结果 ① 乘积的符号位 x0 y0 = 1 0 = 1 ② 数值部分按绝对值相乘 x*• y* = 0. 1 0 1 1 0 1 1 0 则 [x • y]原 = 1. 1 0 1 1 0 1 1 0 特点 绝对值运算 用移位的次数判断乘法是否结束 逻辑移位

6.3 (3) 原码一位乘的硬件配置 Q n 移位和加控制 0 A n 加 法 器 控 制 门 0 X n A、X、Q 均 n+1 位 加 法 器 控 制 门 0 X n 移位和加控制 计数器 C S GM Q n 右移 A、X、Q 均 n+1 位 移位和加受末位乘数控制

6.3 (4) 原码两位乘 原码乘 符号位 和 数值位 部分 分开运算 两位乘 每次用 乘数的 2 位判断 原部分积 是否加 和 如何加 被乘数 新的部分积 乘数yn-1 yn 0 0 加 “0” 2 0 1 加 1 倍的被乘数 2 1 0 加 2 倍的被乘数 2 1 1 加 3 倍的被乘数 2 4 – 1 3 100 – 01 11 3 ? 先 减 1 倍 的被乘数 再 加 4 倍 的被乘数

6.3 (5) 原码两位乘运算规则 共有操作 +x* +2x* –x* 2 操 作 内 容 标志位 Cj 乘数判断位 yn-1yn 1 1 1 0 0 1 0 0 z 2, y* 2, Cj 保持“0” z+x* 2, y* 2, Cj 保持“0” z+2x* 2, y* 2, Cj 保持“0” z–x* 2, y* 2, Cj 置“1” 1 1 1 1 0 0 1 0 0 z+x* 2, y* 2, Cj 置“0” z+2x* 2, y* 2, Cj 置“0” z–x* 2, y* 2, Cj 保持“1” z 2, y* 2, Cj 保持“1” 共有操作 +x* +2x* –x* 2 实际操作 +[x*]补 +[2x*]补 +[–x* ]补 2 补码移

6.3 例6.22 已知 x = 0.111111 y = – 0.111001 求[x·y]原 解: Cj 数值部分的运算 部 分 积 乘 数 说 明 数值部分的运算 0 0 0 . 0 0 0 0 0 0 0 0 . 1 1 1 0 0 1 初态 z0 = 0 补码右移 + 0 0 0 . 1 1 1 1 1 1 + x*, Cj = 0 0 0 0 . 1 1 1 1 1 1 0 0 0 . 0 0 1 1 1 1 1 1 0 0 1 1 1 0 2 + 0 0 1 . 1 1 1 1 1 0 + 2x*,Cj = 0 补码右移 0 1 0 . 0 0 1 1 0 1 1 1 0 0 0 . 1 0 0 0 1 1 0 1 1 1 0 0 1 1 2 + 1 1 1 . 0 0 0 0 0 1 – x*, Cj = 1 1 1 1 . 1 0 0 1 0 0 0 1 1 1 补码右移 1 1 1 . 1 1 1 0 0 1 0 0 0 1 1 1 0 0 2 1 + 0 0 0 . 1 1 1 1 1 1 + x*, Cj = 0 0 0 0 . 1 1 1 0 0 0 0 0 0 1 1 1

6.3 例6.22 结果 ① 乘积的符号位 x0 y0 = 0 1 = 1 ② 数值部分的运算 例6.22 结果 6.3 ① 乘积的符号位 x0 y0 = 0 1 = 1 ② 数值部分的运算 x*• y* = 0. 1 1 1 0 0 0 0 0 0 1 1 1 则 [x • y]原 = 1. 1 1 1 0 0 0 0 0 0 1 1 1 特点 绝对值的补码运算 用移位的次数判断乘法是否结束 算术移位

6.3 (6) 原码两位乘和原码一位乘比较 原码一位乘 原码两位乘 符号位 操作数 移位 移位次数 最多加法次数 x0 y0 x0 y0 绝对值 绝对值的补码 逻辑右移 算术右移 n 2 (n为偶数) n n 2 +1(n为偶数) n 思考 n 为奇数时,原码两位乘 移 ?次 最多加 ?次

6.3 5. 补码乘法 (1) 补码一位乘运算规则 以小数为例 设 被乘数 [x]补 = x0. x1x2 xn … 乘数 [y]补 = y0. y1y2 yn … ① 被乘数任意,乘数为正 同原码乘 但 加 和 移位 按 补码规则 运算 乘积的符号自然形成 ② 被乘数任意,乘数为负 乘数[y]补,去掉符号位,操作同 ① 最后 加[–x]补,校正

6.3 ③ Booth 算法 (被乘数、乘数符号任意) 设[x]补 = x0.x1x2 xn [y]补 = y0.y1y2 yn … [x · y]补 –[x]补= +[–x]补 = [x]补( 0.y1 yn ) – [x]补 · y0 … = [x]补(y1 2-1+y22-2+ +yn2-n) – [x]补 · y0 … 2-1 = 20 – 2-1 = [x]补(–y0+y1 2-1+y22-2+ +yn2-n) … 2-1 2-2 2-2 = 2-1 – 2-2 = [x]补[–y0+(y1 – y12-1)+(y22-1–y22-2)+ +(yn2-(n-1)–yn2-n)] … = [x]补[(y1–y0)+(y2–y1)2-1+ +(yn–yn-1)2-(n-1)+(0 –yn)2-n)] … = [x]补[(y1–y0)+(y2–y1)2-1+ +(yn+1–yn)2-n] … 附加位 yn+1 y1 2-1 + + … yn 2-n

6.3 ④ Booth 算法递推公式 [z0]补= 0 [z1]补= 2-1{(yn+1–yn)[x]补+[z0]补} yn+1 = 0 … [zn]补= 2-1{(y2–y1)[x]补+[zn-1]补} [x · y]补= [zn]补+(y1–y0)[x]补 最后一步不移位 yi yi+1 操作 yi+1–yi 如何实现 yi+1–yi ? 0 0 1 0 1 1 +[x]补 1 1 0 -1 +[–x]补 1 1 1 1

6.3 例6.23 已知 x = +0.0011 y = – 0.1011 求[x·y]补 解: 0 0 . 0 0 0 0 1 . 0 1 0 1 [x]补 = 0.0011 + 1 1 . 1 1 0 1 +[–x]补 [y]补 = 1.0101 1 1 . 1 1 0 1 补码右移 1 1 . 1 1 1 0 1 1 0 1 0 1 [–x]补 = 1.1101 + 0 0 . 0 0 1 1 +[x]补 0 0 . 0 0 0 1 1 补码右移 0 0 . 0 0 0 0 1 1 1 0 1 1 + 1 1 . 1 1 0 1 +[–x]补 1 1 . 1 1 0 1 1 1 补码右移 ∴ [x·y]补 =1.11011111 1 1 . 1 1 1 0 1 1 1 1 0 1 + 0 0 . 0 0 1 1 +[x]补 0 0 . 0 0 0 1 1 1 1 补码右移 0 0 . 0 0 0 0 1 1 1 1 1 1 + 1 1 . 1 1 0 1 +[–x]补 1 1 . 1 1 0 1 1 1 1 1 最后一步不移位

6.3 (2) Booth 算法的硬件配置 A、X、Q 均 n + 2 位 移位和加受末两位乘数控制 0 A n+1 n + 2 位加法器 控 制 门 0 X n+1 0 Q n n+1 移位和加 控制逻辑 计数器 C GM 00,11 01 10 右移 A、X、Q 均 n + 2 位 移位和加受末两位乘数控制

6.3 乘法小结 整数乘法与小数乘法完全相同 可用 逗号 代替小数点 原码乘 符号位 单独处理 补码乘 符号位 自然形成 原码乘 符号位 单独处理 补码乘 符号位 自然形成 原码乘去掉符号位运算 即为无符号数乘法 不同的乘法运算需有不同的硬件支持

6.3 四、除法运算 1. 分析笔算除法 x = – 0.1011 y = 0.1101 求 x÷y ? ? ? 0 . 1 1 1 商符单独处理 ⌒ 0 . 1 1 0 1 0 . 1 0 1 1 ? 0 . 0 1 1 0 1 心算上商 0 . 0 1 0 0 1 ? 余数不动低位补“0” 减右移一位的除数 0 . 0 0 1 1 0 1 0 . 0 0 0 1 0 1 0 . 0 0 0 0 1 1 0 1 ? 上商位置不固定 0 . 0 0 0 0 0 1 1 1 x÷y = – 0. 1 1 0 1 余数 0. 0 0 0 0 0 1 1 1 商符心算求得

6.3 2. 笔算除法和机器除法的比较 笔算除法 机器除法 商符单独处理 符号位异或形成 心算上商 | x | – | y | > 0 上商 1 | x | – | y | < 0 上商 0 余数 不动 低位补“0” 减右移一位 的除数 余数 左移一位 低位补“0” 减 除数 2 倍字长加法器 1 倍字长加法器 上商位置 不固定 在寄存器 最末位上商

6.3 3. 原码除法 以小数为例 [ x ]原 = x0. x1x2 xn … [ y ]原 = y0. y1y2 yn … [ ]原 = (x0 y0). x y x* y* 式中 x* = 0. x1x2 xn 为 x 的绝对值 y* = 0. y1y2 yn 为 y 的绝对值 … 商的符号位单独处理 x0 y0 数值部分为绝对值相除 x* y* 约定 小数定点除法 x* < y* 整数定点除法 x* > y* 被除数不等于 0 除数不能为 0

6.3 (1) 恢复余数法 解: 例6.24 [ ]原 x = – 0.1011 y = – 0.1101 求 x y [ ]原 x y 例6.24 解: [x]原 = 1.1011 [y]原 = 1.1101 [y*]补 = 0.1101 [– y*]补 = 1.0011 ① x0 y0 = 1 1 = 0 ② 被除数(余数) 商 说 明 0 . 1 0 1 1 0 . 0 0 0 0 + 1 . 0 0 1 1 +[– y*]补 1 . 1 1 1 0 余数为负,上商 0 + 0 . 1 1 0 1 恢复余数 +[y*]补 0 . 1 0 1 1 恢复后的余数 逻辑左移 1 . 0 1 1 0 1 + 1 . 0 0 1 1 +[–y*]补 0 . 1 0 0 1 余数为正,上商 1 1 逻辑左移 1 . 0 0 1 0 0 1 1 + 1 . 0 0 1 1 +[– y*]补

6.3 被除数(余数) 商 说 明 0 . 0 1 0 1 0 1 余数为正,上商 1 1 逻辑左移 1 0 . 1 0 1 0 0 1 1 + 1 . 0 0 1 1 +[– y*]补 1 . 1 1 0 1 0 1 1 余数为负,上商 0 + 0 . 1 1 0 1 恢复余数 +[y*]补 0 . 1 0 1 0 恢复后的余数 0 1 1 0 逻辑左移 1 . 0 1 0 0 0 1 1 0 1 + 1 . 0 0 1 1 +[– y*]补 0 . 0 1 1 1 0 1 1 0 余数为正,上商 1 1 = 0.1101 x* y* 上商 5 次 ∴ [ ]原 x y = 0.1101 第一次上商判溢出 余数为正 上商 1 移 4 次 余数为负 上商 0,恢复余数

6.3 (2) 不恢复余数法 (加减交替法) 恢复余数法运算规则 不恢复余数法运算规则 余数 Ri>0 上商 “1”,2Ri – y* 2( Ri+y*) – y* = 2Ri + y* 不恢复余数法运算规则 上商“1” 2Ri – y* 加减交替 上商“0” 2Ri + y*

x = – 0.1011 y = – 0.1101 求 [ ]原 x y 6.3 例6.25 解: 0 . 1 0 1 1 0 . 0 0 0 0 [x]原 = 1.1011 1 . 0 0 1 1 +[– y*]补 + [y]原 = 1.1101 逻辑左移 1 . 1 1 1 0 余数为负,上商 0 1 . 1 1 0 0 1 [x*]补 = 0.1011 +[y*]补 + 0 . 1 1 0 1 [y*]补 = 0.1101 逻辑左移 0 . 1 0 0 1 余数为正,上商 1 1 1 . 0 0 1 0 0 1 1 [–y*]补 = 1.0011 1 . 0 0 1 1 +[– y*]补 + 逻辑左移 0 . 0 1 0 1 0 1 余数为正,上商 1 1 0 . 1 0 1 0 0 1 1 1 +[– y*]补 + 1 . 0 0 1 1 逻辑左移 1 . 1 1 0 1 0 1 1 余数为负,上商 0 1 . 1 0 1 0 0 1 1 0 1 0 . 1 1 0 1 +[y*]补 + 0 . 0 1 1 1 0 1 1 0 余数为正,上商 1 1

6.3 例6.25 结果 ① x0 y0 = 1 1 = 0 ② = 0.1101 [ ]原 ∴ = 0.1101 上商 n+1 次 特点 例6.25 结果 ① x0 y0 = 1 1 = 0 ② x* y* = 0.1101 ∴ = 0.1101 [ ]原 x y 上商 n+1 次 特点 第一次上商判溢出 移 n 次,加 n+1 次 用移位的次数判断除法是否结束

6.3 (3) 原码加减交替除法硬件配置 A、X、Q 均 n +1 位 用 Qn 控制加减交替 0 A n n + 1 位加法器 控 制 门 0 X n 0 Q n 计数器 C GD 加 减 移位和加控制逻辑 S V 左移 A、X、Q 均 n +1 位 用 Qn 控制加减交替

6.3 4. 补码除法 (1) 商值的确定 x 与 y 同号 + + ① 比较被除数和除数绝对值的大小 x*>y* x = 0.1011 ① 比较被除数和除数绝对值的大小 x 与 y 同号 x*>y* x = 0.1011 y = 0.0011 [x]补 = 0.1011 [y]补 = 0.0011 [x]补 = 0.1011 + [–y]补 = 1.1101 [Ri]补与[y]补同号 [Ri]补= 0.1000 “够减” x = – 0.0011 y = – 0.1011 [x]补 = 1.1101 [y]补 = 1.0101 [x]补 = 1.1101 x*<y* + [–y]补 = 0.1011 [Ri]补与[y]补异号 [Ri]补= 0.1000 “不够减”

6.3 x*>y* + x*<y* + 小结 x 与 y 异号 x = 0.1011 y = – 0.0011 [x]补 = 0.1011 [Ri]补与[y]补异号 [Ri]补= 0.1000 “够减” x*<y* x = – 0.0011 y = 0.1011 [x]补 = 1.1101 [y]补 = 0.1011 [x]补 = 1.1101 + [y]补 = 0.1011 [Ri]补与[y]补同号 [Ri]补= 0.1000 “不够减” 小结 [x]补和[y]补 求 [Ri]补 [Ri]补与 [y]补 同号 异号 [x]补– [y]补 [x]补+ [y]补 同号,“够减” 异号,“够减”

6.3 ② 商值的确定 末位恒置“1”法 ×.×××× 1 0. ×××× 1 1.×××× 1 小 结 简 化 为 [x]补与 [y]补同号 原码 0. ×××× 1 按原码上商 “够减”上“1” “不够减”上“0” 正商 [x]补与 [y]补异号 反码 1.×××× 1 按反码上商 “够减”上“0” “不够减”上“1” 负商 小 结 [x]补与 [y]补 商 [Ri]补与 [y]补 商 值 够减 不够减 同 号 异 号 正 负 1 原码上商 反码上商 (同号) (异号) (异号) (同号) [Ri]补与[y]补 商值 同 号 异 号 1 简 化 为

6.3 (2) 商符的形成 除法过程中自然形成 [x]补和[y]补同号 [x]补–[y]补 [x]补和[y]补异号 [x]补+[y]补 比较[Ri]补和[y]补 同号(够)“1” 原码上商 异号(不够)“0” 小数除法 第一次“不够”上“0” 正商 [x]补和[y]补异号 [x]补+[y]补 比较[Ri]补和[y]补 异号(够)“0” 反码上商 同号(不够)“1” 小数除法 第一次“不够”上“1” 负商

6.3 (3) 新余数的形成 加减交替 1 [Ri]补和 [y]补 商 新余数 同 号 异 号 2[Ri]补 + [–y]补 2[Ri]补 + [–y]补 2[Ri]补 + [ y ]补

例6.26 6.3 设 x = – 0.1011 y = 0.1101 求 并还原成真值 [ ]补 x y 解: [x]补 = 1.0101 [y]补 = 0.1101 [–y]补 = 1.0011 1 . 0 1 0 1 0 . 0 0 0 0 + 0 . 1 1 0 1 异号做加法 0 . 0 0 1 0 1 逻辑左移 同号上“1” 0 . 0 1 0 0 1 +[–y]补 + 1 . 0 0 1 1 1 . 0 1 1 1 1 逻辑左移 异号上“0” 0 . 1 1 1 0 1 0 1 + 0 . 1 1 0 1 +[y]补 1 . 1 0 1 1 1 0 逻辑左移 异号上“0” [ ]补= 1.0011 x y ∴ 1 . 0 1 1 0 1 0 0 1 0 . 1 1 0 1 +[y]补 x y = – 0.1101 则 + 0 . 0 0 1 1 1 0 0 1 逻辑左移 同号上“1” 0 . 0 1 1 0 1 0 0 1 1 1 末位恒置“1”

6.3 (4) 小结 补码除法共上商 n +1 次(末位恒置 1) 第一次为商符 第一次商可判溢出 加 n 次 移 n 次 用移位的次数判断除法是否结束 精度误差最大为 2-n

6.3 (5) 补码除和原码除(加减交替法)比较 原码除 补码除 商符 操作数 上商原则 上商次数 加法次数 移位次数 第一步操作 移位 x0 y0 自然形成 绝对值补码 补码 余数的正负 比较余数和除数的符号 n +1 n +1 n +1 n 逻辑左移 逻辑左移 n n [x*]补- [y*]补 同号[x]补- [y]补 异号[x]补+ [y]补

6.4 浮点四则运算 一、浮点加减运算 x = Sx · 2jx y = Sy · 2jy 1. 对阶 Δj = jx – jy = (1) 求阶差 = 0 > 0 < 0 jx= jy 已对齐 x 向 y 看齐 Sx 1, jx–1 Δj = jx – jy = jx> jy y 向 x 看齐 Sy 1, jy+1 x 向 y 看齐 Sx 1, jx+1 jx< jy y 向 x 看齐 Sy 1, jy–1 (2) 对阶原则 小阶向大阶看齐

例如 x = 0.1101 × 201 y = (–0.1010) × 211 求 x + y 6.4 解: [x]补 = 00, 01; 00.1101 [y]补 = 00, 11; 11.0110 1. 对阶 ① 求阶差 [Δj]补 = [jx]补 – [jy]补 = 00, 01 11, 01 + 11, 10 阶差为负( – 2) ∴ Sx 2 jx+ 2 ② 对阶 [x]补' = 00, 11; 00.0011 2. 尾数求和 [Sx]补' = 00.0011 对阶后的[Sx]补' + [Sy]补 = 11.0110 11.1001 ∴ [x+y]补 = 00, 11; 11. 1001

6.4 3. 规格化 (1) 规格化数的定义 r = 2 ≤ |S| <1 (2) 规格化数的判断 S>0 规格化形式 S< 0 规格化形式 0.1×× × … – 0.1×× × … 真值 真值 原码 0.1×× × … 原码 1.1×× × … 1.0×× × … 补码 0.1×× × … 补码 反码 0.1×× × … 反码 1.0×× × … 原码 不论正数、负数,第一数位为1 补码 符号位和第 一数位不同

6.4 特例 … S = – = – 0.100 0 … [S]原 = 1 . 1 0 0 0 … [S]补 = 1 . 1 0 0 0 2 … [S]原 = 1 . 1 0 0 0 … [S]补 = 1 . 1 0 0 0 … ∴ [– ]补 不是规格化的数 1 2 S = – 1 [S]补 = 1 . 0 0 0 0 … ∴ [–1]补 是规格化的数

6.4 (3) 左规 尾数左移一位,阶码减 1,直到数符和第一数位不同为止 上例 [x+y]补 = 00, 11; 11. 1001 左规后 [x+y]补 = 00, 10; 11. 0010 ∴ x + y = (– 0.1110)×210 (4) 右规 当 尾数溢出( >1)时,需 右规 即尾数出现 01. ×× ×或 10. ×× ×时 … 尾数右移一位,阶码加 1

6.4 例6.27 x = 0.1101× 210 y = 0.1011× 201 求 x +y(除阶符、数符外,阶码取 3 位,尾数取 6 位) 解: [x]补 = 00, 010; 00. 110100 [y]补 = 00, 001; 00. 101100 ① 对阶 [Δj]补 = [jx]补 – [jy]补 = 00, 010 + 11, 111 100, 001 阶差为 +1 ∴ Sy 1, jy+1 ∴ [y]补' = 00, 010; 00. 010110 ② 尾数求和 [Sx]补 = 00. 110100 + [Sy]补' = 00. 010110 对阶后的[Sy]补' 01. 001010 尾数溢出需右规

6.4 ③ 右规 [x +y]补 = 00, 010; 01. 001010 右规后 [x +y]补 = 00, 011; 00. 100101 ∴ x +y = 0. 100101 × 211 4. 舍入 在 对阶 和 右规 过程中,可能出现 尾数末位丢失 引起误差,需考虑舍入 (1) 0 舍 1 入法 (2) 恒置 “1” 法

6.4 例 6.28 x = (– —)×2-5 y = (—) ×2-4 求 x – y(除阶符、数符外,阶码取 3 位,尾数取 6 位) 7 求 x – y(除阶符、数符外,阶码取 3 位,尾数取 6 位) 解: x = (– 0.101000)×2-101 y = ( 0.111000)×2-100 [x]补 = 11, 011; 11. 011000 [y]补 = 11, 100; 00. 111000 ① 对阶 [Δj]补 = [jx]补 – [jy]补 = 11, 011 + 00, 100 11, 111 阶差为 –1 ∴ Sx 1, jx+ 1 ∴ [x]补' = 11, 100; 11. 101100

6.4 ② 尾数求和 ③ 右规 [Sx]补´ = 11. 101100 [–Sy]补 = 11. 001000 + 110. 110100 [x – y]补 = 11, 100; 10. 110100 右规后 [x – y]补 = 11, 101; 11. 011010 ∴ x – y = (–0.100110)×2-11 = (– —)×2-3 19 32

6.4 5. 溢出判断 设机器数为补码,尾数为 规格化形式,并假 设阶符取 2 位,阶码的数值部分取 7 位,数符取 2 位,尾数取 n 位,则该 补码 在数轴上的表示为 阶码 10, ××···× 按机器零处理 上溢 下溢 对应 负浮点数 正浮点数 阶码 01, ××···× 阶码 01, ××···× 最小负数 最大负数 最小正数 最大正数 00,1111111;11.00 0 … 00,1111111;00.11 1 … 2127×(–1) 2127×(1–2-n) 11,0000000;00.100 0 … 2-128×2-1 11,0000000;11.011 1 … – 2-128×(2-1+ 2-n)

6.4 二、浮点乘除运算 x = Sx · 2jx y = Sy · 2jy 1. 乘法 x · y = (Sx · Sy)×2jx+jy 2. 除法 x y = Sx Sy × 2jx – jy 3. 步骤 (1) 阶码采用 补码定点加(乘法)减(除法)运算 (2) 尾数乘除同 定点 运算 (3) 规格化 4. 浮点运算部件 阶码运算部件,尾数运算部件

6.5 算术逻辑单元 四位 ALU 74181 一、ALU 电路 组合逻辑电路 Ki 不同取值 Fi 不同 … M = 0 算术运算 Ai Bi Fi … Ki 组合逻辑电路 Ki 不同取值 Fi 不同 四位 ALU 74181 M = 0 算术运算 M = 1 逻辑运算 S3 ~ S0 不同取值,可做不同运算

6.5 二、快速进位链 1. 并行加法器 di = Ai Bi 本地进位 ti = Ai + Bi 传送条件 FAn FAn-1 FA1 FA0 FAn-2 Cn Sn Cn-1 Sn-1 Cn-2 Sn-2  … C1 S1 C0 S0 C-1 A0 B0 A1 B1 An-2 Bn-2 An-1 Bn-1 An Bn Si = Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1 Ci = Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1+Ai Bi Ci-1 = Ai Bi + (Ai+Bi)Ci-1 di = Ai Bi 本地进位 ti = Ai + Bi 传送条件 则 Ci = di + tiCi-1

6.5 2. 串行进位链 进位链 传送进位的电路 串行进位链 进位串行传送 以 4 位全加器为例,每一位的进位表达式为 C0 = d0 + t0C-1 = d0 • t0C-1 C1 = d1 + t1C0 C2 = d2 + t2C1 设与非门的级延迟时间为ty C3 = d3 + t3C2 & C3 t3 t2 t1 t0 C2 C1 C0 C-1 d3 d2 d1 d0 4 位 全加器产生进位的全部时间为 8ty n 位全加器产生进位的全部时间为 2nty

6.5 3. 并行进位链 (先行进位,跳跃进位) n 位加法器的进位同时产生 以 4 位加法器为例 C0 = d0 + t0C-1 当 di ti 形成后,只需 2.5ty 产生全部进位 C1 = d1 + t1C0 = d1 + t1d0 + t1t0C-1 C2 = d2 + t2C1 = d2 + t2d1 + t2t1d0 + t2t1t0C-1 C3 = d3 + t3C2 = d3 + t3d2 + t3t2d1 + t3t2t1d0 + t3t2t1t0C-1 ≥1 & C-1 d3 t3 d2 t2 d1 t1 d0 t0 1 C0 C1 C2 C3 设与或非门的延迟时间为 1.5ty

6.5 (1) 单重分组跳跃进位链 n 位全加器分若干小组,小组中的进位同时产生, 小组与小组之间采用串行进位 以 n = 16 为例 C15 C14 C13 C12 C11 C10 C9 C8 C7 C6 C5 C4 C3 C2 C1 C0 C-1 第 1 组 第 2 组 第 3 组 第 4 组 d15 t15 d14 d13 d12 t14 t13 t12 d11 d10 d9 d8 t11 t10 t9 t8 d7 d6 d5 d4 t7 t6 t5 t4 d3 d2 d1 d0 t3 t2 t1 t0 当 di ti 形成后 经 2.5 ty 产生 C3 ~ C0 5 ty 产生 C7 ~ C4 7.5 ty 产生 C11 ~ C8 1 0 ty 产生 C15 ~ C12

6.5 (2) 双重分组跳跃进位链 n 位全加器分若干大组,大组中又包含若干小组。每个大组中小组的最高位进位同时产生。大组与大组之间采用串行进位。 以 n = 32 为例 C31 C27 C23 C19 C15 C11 C7 C3 第 一 大 组 第 二 大 组 1 3 2 4 5 6 7 8

6.5 (3) 双重分组跳跃进位链 大组进位分析 = + D8 D8 小组的本地进位 与外来进位无关 以第 8 小组为例 C3 = d3 + t3C2 = d3 + t3d2 + t3t2d1 + t3t2t1d0 + t3t2t1t0C-1 C-1 = + D8 T8 D8 小组的本地进位 与外来进位无关 T8 小组的传送条件 与外来进位无关 传递外来进位 同理 第 7 小组 C7 = D7 + T7C3 第 6 小组 C11= D6 + T6C7 第 5 小组 C15 = D5 + T5C11 进一步展开得 C3 = D8+T8C-1 C7 = D7+T7C3 = D7+T7D8+T7T8C-1 C11 = D6+T6C7 = D6+T6D7+T6T7D8+T6T7T8C-1 C15 = D5+T5C11 = D5+T5D6+T5T6D7+T5T6T7D8+T5T6T7T8C-1

6.5 (4) 双重分组跳跃进位链的 大组 进位线路 以第 2 大组为例 T5 T6 & 1 C-1 D5 D6 D7 T7 D8 T8 ≥1 & 1 C-1 D5 D6 D7 T7 D8 T8 C15 C11 C7 C3 第 5 小组 第 6 小组 第 7 小组 第 8 小组

6.5 (5) 双重分组跳跃进位链的 小组 进位线路 以第 8 小组为例 只产生 低 3 位 的进位和 本小组的 D8 T8 C2 C1 ≥1 & C-1 d3 t3 d2 t2 d1 t1 d0 t0

6.5 (6) n =16 双重分组跳跃进位链 第 二 重 进 位 链 C15 C11 C7 C3 D5 T5 D6 T6 D7 T7 D8 第 二 重 进 位 链 D5 T5 D6 T6 D7 T7 D8 T8 C14~12 C10~8 C6~4 C2~0 第 5 小组 第 6 小组 第 7 小组 第 8 小组 C-1 d15~12 t15~12 d11~8 t11~8 d9~4 t9~4 d3~0 t3~0 当 di ti 和C-1形成后 经 2.5 ty 产生 C2、C1、C0、D5 ~ D8、T5 ~ T8 经 5 ty 产生 C15、 C11、 C7、 C3 经 7.5 ty 产生 C14~C12、 C10~C8 、 C6~C4 串行进位链 经 3 2 ty 产生 全部进位 单重分组跳跃进位链 经 1 0 ty 产生 全部进位

6.5 (7) n =32 双重分组跳跃进位链 第 一 大 组 第 二 大 组 di ti 1 2 3 4 5 6 7 8 … C31 第 一 大 组 第 二 大 组 … D1 T1 D2 T2 D3 T3 D4 T4 D5 T5 D6 T6 D7 T7 D8 T8 C31 C27 C23 C19 C15 C11 C7 C3 C30~28 C26~24 C22~20 C18~16 C14~12 C10~8 C6~4 C2~0 C-1 当 di ti 形成后 经 2.5 ty 产生 C2、C1、C0、D1 ~ D8、T1 ~ T8 5 ty 产生 C15、 C11、 C7、 C3 7.5 ty 产生 C18 ~C16、 C14~C12、 C10~C8 、 C6~C4 C31、 C27、 C23、 C19 1 0 ty 产生 C30~C28、 C26 ~C24、 C22 ~C20