双精度浮点数转换,单浮点数转换双浮点数

首页 > 上门服务 > 作者:YD1662024-01-08 11:45:31

其中,5=E-常数=e,M=0.11010101,S=0。

我们知道浮点数分为单精度和双精度。

若是单精度,则占4个字节,E占8位,M占23位,再加上S段,总共就是32位,刚好也是4个字节,两者是一致的。

若是双精度,则占8个字节,E占11位,M占52位,再加上S段,总共就是64位,刚好也是8个字节,这两者也是一致的。

1、那么,如果58.625是单精度浮点数,那它在内存中的二进制存储是怎么样的呢?

首先,我们先要明确一个前提:

若是单精度,那么E就占8位,取值范围就是0~255,且e=E-127,所以e的取值范围就是-127~128。

那么,接下来,我们就可以开始计算了:

显然,S=0,因为58.625是正数。

而E=e 127=5 127=132,转换成二进制就是1000 0100。

M则取小数部分,所以M=1101 0101。

所以,最终58.625在内存存储的二进制就是:

双精度浮点数转换,单浮点数转换双浮点数(5)

由于单精度占4个字节,所以要在不改变数值的大小的前提下将位数补齐,所以才在小数后面补0。

若是-58.625,那就只需把S改成1即可,其他位不变。

2、如果58.625是双精度浮点数,那它在内存中的二进制存储是怎么样的呢?

同样,首先,我们需要明确一个前提:

若是双精度,那么E就占11位,取值范围就是0~2047(即2048-1=2^11-1),且e=E-1023,所以e的取值范围就是-1023~1024。

接下来,我们再开始计算双精度的二进制:

显然,S=0,因为58.625是正数。

而E=e 1023=5 1023=1028=1028的二进制。

M则同样取小数部分,所以M=1101 0101。

所以,双精度的58.625在内存中的二进制存储就是:

双精度浮点数转换,单浮点数转换双浮点数(6)

同样,若是-58.625,则只需把S改成1即可,其他位不变。

补充:二进制浮点数如何转换成十进制浮点数?

依旧以单精度的58.625为例。

由前面可知,单精度的58.625的二进制为:

0 1000 0100 110 1010 1000 0000 0000 0000

首先,计算出指数的幂次:

明确一个前提:E=e 127

所以,E=1000 0100=132

所以,e=E-127=132-127=5

又由于S=0,所以该数值为正数。

所以,

双精度浮点数转换,单浮点数转换双浮点数(7)

好了,我们已经把“在内存中存储的浮点数的二进制”转换成了“我们比较好识别的浮点数的二进制”,即“能够区分出整数部分和小数部分”的浮点数的二进制。

整数部分的二进制转换成十进制,这里我们就不再赘述了。方法和普通的“十进制整数与二进制之间的转换”一样。重点和难点在于,如何将小数部分的二进制转换成十进制。那么,怎么转换呢?

首先要明确一点:小数部分是0.101

其次,将小数部分的二进制转换成十进制,其方法其实和“二进制整数转换成十进制整数”的方法是类似的,只不过,指数的幂次是负数。具体过程如下:

双精度浮点数转换,单浮点数转换双浮点数(8)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.