计算机组成与体系结构——浮点数的表示

289 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、偏移值

将一个数字加上偏移值M,结果称为关于M的移码(Excess-M),这是将数字表示范围偏移到非负数再用原码表示

M = 127 = 2^7-1
-121 = -121+M = 6 = (00000110)2
6是-121关于偏移值M=127的移码

二、浮点数

Ⅰ、表示原理

浮点数用科学计数法表示,一个浮点数分为了三部分存储成二进制码形式,分别是:符号(Sign)、有效数字(Significand)和幂指数(Exponent),通常符号位是一个二进制位,幂指数位小于有效数字位 在这里插入图片描述 表示原理:

  1. 取一浮点数,判断是否为负,若是负数,符号位置1,否则置0
  2. 取其绝对值转换成二进制形式
  3. 表示成 2的N次幂 ✖ 二进制权重的形式,要求:二进制权重的整数部分必须仅为1 (权重为0时除外)这时,二进制权重的小数位就是有效数字部分,不足部分补零,这一步称为规格化有效数字,目的是保证数字的唯一表示,避免形如2=1*2=0.5*4。(这步等价于右移N位直到整数部分仅为1)
  4. 取上一步的N,对其偏移M=2^(指数位长度-1)^-1 (取N+M),结果就是幂指数部分,目的是为了消除指数的符号位
例:字长为8,有1个符号位,2个指数位和5个有效数字位,试表示3.75
	符号位置0:0 00 00000
	表示为11.11
	表示为2^1 ✖ 1.111,取小数位,不足补零:0 00 11100
	偏移量M=2^(2-1)-1=1,移码得1+1=10:0 10 11100
结果为:01011100

Ⅱ、实际的浮点表示

计算机中的浮点表示遵循《IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)》

通常浮点数有以下两种:

  • 单精度(Single):长度4B,1位符号,8位指数,23位有效数字,范围[-126,127]
  • 双精度(Double):长度8B,1位符号,11位指数,52位有效数字,范围[-1022,1023]

三、规格化数字、非规格化数字、其他数字

Ⅰ、规格化数字(Normal)

规格化数字有以下特点:

  • 指数位不全为0或1
  • 有效数字位前有隐含位1(有效数字位的第二高位为1)
(只做示意,此处数制混用不规范)
例如:
0 01111100 01000000000000000000000,M=2^(8-1)-1=127
=1.01✖2^(01111100-127) 
=1.01✖2^-3
=0.00101
=0.15625
是规格化的数字

Ⅱ、非规格化数字(Subnormal/Denormalized)

非规格化数字有以下特点:

  • 指数位全为0
  • 有效数字位前没有有隐含位1(有效数字位的第二高位为0)
(只做示意)
例如:
0 00000000 00000000000000000000001
=2^-149
≈1.4✖10^-45
是非规格化的数字

Ⅲ、特殊数字

  • 指数位全为1
例如:
0 11111111 000000000000000000000 → +∞
0 11111111 100000000000000000001 → NaN
0 11111111 000000000000000000001 → SNaN