关于计算机:5分钟聊聊浮点数的底层存储

40次阅读

共计 684 个字符,预计需要花费 2 分钟才能阅读完成。

浮点数的二进制示意,基本上就是用二进制的迷信计数法来示意。

一个十进制的数 0.75,用迷信计数法示意是 +7.5*10^-1,分为 3 个局部,正负号、7.5 和 -1。

其中小数点前的局部,肯定是一个 1 - 9 之间的数。也就是你不能写成 +75*10^-2。

好了,换成 2 进制(以下均以 float 类型为例),因为它占用的位数无限(个别是 32 位),因而咱们须要仿照十进制迷信计数法的形式,把这些位切分为 3 局部。

符号只有正负,因而用 1 位示意。

指数和尾数局部的划分决定了数字能示意的最大值和精度。IEEE 的规范,指数位是 8 位,剩下是尾数位。

8 位能够示意的范畴是 0 到 255,或者 -127 到 +128,为了能示意 2^- 1 的概念,抉择后者。

尾数的精华在于跟十进制的示意一样,方才说十进制的小数点之前是 1 -9,那么二进制的小数点之前肯定有一个 1。

二进制转十进制

以上面这一串比特位为例:

0-01111110-10000000000000000000000

0 是符号位,代表负数。

两头是指数位,写成十进制是 126,减去 127 之后失去 -1。

最初是尾数,疏忽开端的 0,同时在小数点前补 1,失去 1.1,转成十进制是 1.5。

咱们把三个局部拼起来,失去 +1.5*2^-1=0.75

十进制转二进制

以 2.75 为例子,先把小数点前后都写成二进制模式,失去 10.11。

10.11*2^0 不满足要求,为了让小数点前的数是 1,所以咱们向左挪一下小数点,失去 1.011*2^1。

(下面这步和把 75*10^0 写成 7.5*10^1 是一个意思)

最初咱们把 3 个局部提取进去,别离是符号位 0,指数位 1 +127=10000000,尾数位 0110…

正文完
 0