本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、偏移值
将一个数字加上偏移值M,结果称为关于M的移码(Excess-M),这是将数字表示范围偏移到非负数再用原码表示
M = 127 = 2^7-1
-121 = -121+M = 6 = (00000110)2
6是-121关于偏移值M=127的移码
二、浮点数
Ⅰ、表示原理
浮点数用科学计数法表示,一个浮点数分为了三部分存储成二进制码形式,分别是:符号(Sign)、有效数字(Significand)和幂指数(Exponent),通常符号位是一个二进制位,幂指数位小于有效数字位
表示原理:
- 取一浮点数,判断是否为负,若是负数,符号位置1,否则置0
- 取其绝对值转换成二进制形式
- 表示成 2的N次幂 ✖ 二进制权重的形式,要求:二进制权重的整数部分必须仅为1 (权重为0时除外)。这时,二进制权重的小数位就是有效数字部分,不足部分补零,这一步称为规格化有效数字,目的是保证数字的唯一表示,避免形如2=1*2=0.5*4。(这步等价于右移N位直到整数部分仅为1)
- 取上一步的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