我们知道
整型数据进行进制转换即可 如 5 ->> 101
但实数怎么表示呢?
首先
数据类型有 float double 两种分别 32位 64位(4 、8字节)
浮点标准表示数
数 V=(-1)^s * M * 2^E
这个式子看起来有点复杂
但是对二进制操作却很方便(2^n其实就是小数点的移位操作)
其中 s M E由数据的三段决定(s 、 exp、 frac)
数据
单精度float
双精度double
其中 公式中s = s 的值
根据exp的值分为三种情况:
case1:规格化的值 (exp的位既不全为0,也不全为1)
E=e-Bias
e即为exp的值
Bias=2^(k-1)-1 (k就是exp的位数)
可以看出E的取值是 -2^(k-1)-1 ~ 2^(k-1)
E=exp的值-(2^(k-1)-1) (k就是exp的位数)
M=1+f
f就是frac的值
结果 V=(-1)^s * M * 2^E
case2:非规格化的值 (exp的位全为0)
E=1-Bias
Bias=2^(k-1)-1 (k就是exp的位数)
M=f
f就是frac的值
case3:特殊值 (exp位全为1)
frac位全为0时
s=0时 +oo
s=1时 -oo
frac位不是全0时
结果值称为 'NaN' 即 ‘Not a Number’的简称
针对case1、2、3举几个例子:
设E为4位
frac为3位