计算机组成原理 - 浮点数

文章目录

  • 1 浮点数
    • 1.1 一般格式
    • 1.2 规格化
    • 1.3 表示范围
    • 1.4 原码、反码、补码、移码 取值范围
  • 2 IEEE 754 标准
    • 2.1 阶码
    • 2.2 加减运算
  • 3 扩展
    • 3.1 网工软考真题

1 浮点数

1.1 一般格式

计算机组成原理 - 浮点数_第1张图片

浮点数表示为: N = (-1)S × M × RE
参数 全称 解释
S Sign:标志、符号 决定浮点数的符号,取值 0(正) 或 1(负)
M Mantissa:尾数 反映浮点数的精度
R Radix:基数 隐含,通常为 2、10 等
E Exponent:指数、阶码 反映浮点数的范围及小数点的实际位置
  • 若 R = 10 时, 12345 = ( − 1 ) 0 × 1.2345 × 1 0 4 12345 = (-1)^0 \times 1.2345 \times 10^4 12345=(1)0×1.2345×104
  • 若 R = 2 时, − 101 = ( − 1 ) 1 × 1.01 × 2 10 -101 = (-1)^1 \times1.01 \times 2^{10} 101=(1)1×1.01×210 ,(2D = 10B)

1.2 规格化

规格化 : 规定 尾数最高数值位 必须是一个 有效位(非 0),可通过以下两种方式实现
规格化 规则 举例
左规 尾数算数 左移 1 位,阶码减 1 0.01001 × 21 = 0.10010 × 20
右规 尾数算数 右移 1 位,阶码加 1 01.0100 × 22 = 00.1010 × 23
可用原码、补码对尾数进行规格化,表示形式如下
正数 负数
表示形式 最小值 最大值 表示范围 表示形式 最小值 最大值 表示范围
原码 0.1XX...X 0.10...0 0.11...1 [2-1,1-2-n] 1.1XX...X 1.11...1 1.10...0 [-(1-2-n),-2-1]
补码 1.0XX...X 1.00...0 1.01...1 [-1,-(2-1 + 2-n)]

说明:
① 0.11…1 末尾加 0.00…1 等于 1,即: 0.11...1 + 2 − n = 1 0.11...1 + 2^{-n} = 1 0.11...1+2n=1,推出 0.11...1 = 1 − 2 − n 0.11...1 = 1 - 2^{-n} 0.11...1=12n
② 补码负数规定的表现形式为:“1.0XX…X”,方便硬件识别
③ 左规:使 非规格浮点数 转成 规格化浮点数
④ 右规:使 结果溢出的浮点数 转成 规格化浮点数,一般使用两个符号位(第一个符号位是正确的,第二个符号位为溢出的)

1.3 表示范围

计算机组成原理 - 浮点数_第2张图片

1.4 原码、反码、补码、移码 取值范围

编码 定点整数 定点小数
最小值 最大值 数值个数 最小值 最大值 数值个数
原码 -(2n-1 - 1) 2n-1 - 1 2n-1 -(1 - 2-(n-1)) 1 - 2-(n-1) 2n-1
反码
补码 -2n-1 2n -1 2n
移码 - - -

说明:
① 原码 和 反码 一样,存在 ± 0 \pm0 ±0 的情况 +0=0000 0000,-0=1000 0000
② 补码 和 移码 一样,+0=0000 0000,-128=1000 0000= − 2 7 -2^7 27(特殊规定,记住)
③ 补码 可表示的数值位数 比 原码、反码 多 1,就在于 ± 0 \pm 0 ±0
④ 上述 n 表示机器字长
⑤ 移码 只能用于表示定点整数
扩展:详解 CSDN 博客:https://blog.csdn.net/qq_34745941/article/details/127574811

2 IEEE 754 标准

计算机组成原理 - 浮点数_第3张图片

类型 符号位 S 阶码 E 尾数 M 总位数 偏置值
十六进制 十进制
短浮点数 float 1 8 23 32 7FH 127
长浮点数 double 1 11 52 64 3FFH 1023
临时浮点数 long double 1 15 64 80 3FFFH 16383

2.1 阶码

  • 在 IEEE 754 浮点数标准中,阶码 是用 移码 表示的,移码的 偏置值 是: 2 n − 1 − 1 2^{n-1}-1 2n11,(n:机器字长)
  • 移码的定义:移码 = 阶码真值(E) + 偏置值
  • 规格化的 浮点数 真值 = (-1)S × 1.M × 2E+127
  • 规格化的 长浮点数 真值 = (-1)S × 1.M × 2E+1023

【例题1】将十进制数 -0.75 转换为 IEEE 754 的单精度浮点数格式表示

( − 0.75 ) 10 = ( − 0.11 ) 2 = ( − 1.1 ) 2 × 2 − 1 (-0.75)_{10} = (-0.11)_{2} = (-1.1)_{2} \times 2^{-1} (0.75)10=(0.11)2=(1.1)2×21
数符 = 1(1 位)
尾数部分 = .1000…(隐含最高位 1,共 23 位)
阶码真值 = -1
单精度浮点数偏置值 = 127D
移码 = 阶码真值 + 偏置值 = -1 + 111 1111 = 0111 1110(凑足 8 位)
最终:IEEE 754 单精度浮点数格式:1 0111 1110 1000…

【例题2】IEEE 754 的单精度浮点数 C0 A0 00 00 H 的值是多少?

C0 A0 00 00 H -> 1 1000 0001 .0100…
数符 = 1 -> 负数
尾数部分 = .0100…(隐含最高位 1) -> 尾数真值 = ( 1.01 ) 2 (1.01)_2 (1.01)2
移码 = 1000 0001,若看作无符号数 = 129D
单精度浮点数偏移量 = 127D = 0111 1111
阶码真值 = 移码 - 偏移量 = 1000 0001 - 0111 1111 = (0000 0010)_2 = 2 10 2_{10} 210
最终:浮点数真值 = ( − 1.01 ) 2 × 2 2 = − 1.25 × 2 2 = − 5.0 (-1.01)_2 \times 2^2 = -1.25 \times 2^2 = -5.0 (1.01)2×22=1.25×22=5.0

2.2 加减运算

步骤 描述 举例(0.12 × 1012 + 3.45 × 1010
① 对阶 将小阶向大阶对齐,同时将尾数右移 n 位 0.23 × 1012 + 0.0345 × 1012
② 尾数加减 尾数部分相加减 (0.23 + 0.0345) × 1012 = 0.2645 × 1012
③ 规格化 根据尾数加减的结果,判断是否需要规格化(左规、右规) 2.645 × 1013
④ 舍入 根据机器字长的位数限制进行舍入(规则很多,如:四舍五入) 2.65 × 1013
⑤ 判断溢出 判断阶码的范围是否超出规定

判断溢出:若规定阶码不能超过 2 位,那么运算后阶码超出范围,则表示溢出
如: 5 × 1 0 99 + 5 × 1 0 99 = 10 × 1 0 99 = 1 × 1 0 100 5 × 10^{99} + 5 × 10^{99} = 10 \times 10^{99} = 1 \times 10^{100} 5×1099+5×1099=10×1099=1×10100 (规格化后)
运算后的阶码为 100( 3 位) 超过了规定的 2 位,发生溢出

3 扩展

3.1 网工软考真题

【例题1】浮点数的表示分为阶和尾数两部分。两个浮点数相加时,需要先对阶,即()(n 为阶差的绝对值)
A.将大阶向小阶对齐,同时将尾数左移 n 位
B.将大阶向小阶对齐,同时将尾数右移 n 位
C.将小阶向大阶对齐,同时将尾数左移 n 位
D.将小阶向大阶对齐,同时将尾数右移 n 位

参考答案:D

【例题2】若计算机存储数据采用的是双符号位(00 表示正号、11 表示负号),两个符号相同的数相加时,如果运算结果的两个符号位经()运算得 1,则可判断这两个数相加的结果产生了溢出。
A.逻辑与
B.逻辑或
C.逻辑同或
D.逻辑异或

参考答案:D
00:正号
01:上溢
10:下溢
11:负号
逻辑异或:不同为 1,相同为 0

【例题3】设 16 位浮点数,其中阶符 1 位、阶码值 6 位、数符 1 位、尾数 8 位。若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是()
A. − 2 64 -2^{64} 264 ~ ( 1 − 2 − 8 ) ∗ 2 64 (1-2^{-8}) * 2^{64} (128)264
B. − 2 63 -2^{63} 263 ~ ( 1 − 2 − 8 ) ∗ 2 63 (1-2^{-8}) * 2^{63} (128)263
C. − ( 1 − 2 − 8 ) ∗ 2 64 -(1-2^{-8}) * 2^{64} (128)264 ~ ( 1 − 2 − 8 ) ∗ 2 64 (1-2^{-8}) * 2^{64} (128)264
D. − ( 1 − 2 − 8 ) ∗ 2 63 -(1-2^{-8}) * 2^{63} (128)263 ~ ( 1 − 2 − 8 ) ∗ 2 63 (1-2^{-8}) * 2^{63} (128)263

参考答案:B
浮点数格式 = 2 阶码 × 尾数 2^{阶码} \times 尾数 2阶码×尾数
阶码用移码表示,阶码值为 6 位,则说明 最小值为: − 2 6 = − 64 -2^{6} = -64 26=64,最大值为: 2 6 − 1 = 63 2^{6}-1 = 63 261=63
尾数用补码表示,尾数为 8 位,则说明 最小值为:-1,最大值为: 1 − 2 − 8 1-2^{-8} 128

你可能感兴趣的:(网络工程,浮点数,规格化,左规,右规)