0
点赞
收藏
分享

微信扫一扫

简单了解浮点数在内存中的存储

萍儿的小确幸 2022-03-12 阅读 36
c++c语言

浮点数在C和C++语言中是一种常见的数据类型,其中浮点数又主要分为float类型与double类型,其存储也有一定的规律,其储存规律如下:

对于一个任意的二进制浮点数,可以表示为(-1)^S * M * 2^E 次方的形式,其中(-1)^S 为符号位,当S=0时,只为正;当S=1时,其为负

M表示的是有效数字,其大小大于1或者小于2

2^E 表示的是指数位,以9.0这个浮点数来举例

首先,9的二进制位是1001,而0的二进制位就是0,故9.0的二进制表示形式就是1001.0

其中将1001.0用类似科学计数法的方式可以表示为,1.001 * 2^3 *(-1)^0

其中可以看出,S符号为为0,而M为有效数字,即为1.001,E为指数位,即为3;

而在内存中,浮点数也是依靠S,M和E来进行存储的

在内存中32位的浮点数,其最高的一位是符号位S,接下来8位指的是指数E,剩下的23位才是有效数字M

SEM

其32位bit位分布大概像这样,64位的浮点数也是类似的,64位中首位1位还是符号位,然后接下来的11位都是指数E,剩下的52位都是有效数字M。

其具体存储规则如下:

我们以5.5为例,5.5中5的二进制位是101,而0.5刚好是2的负一次方,故5.5用二进制位表示出来的话是101.1 ,从中我们可以看出,S=0, M=1.011, E=2

我们将其值转换为二进制

即为 0(符号位)  1000 0001(在存储E的时候,规定要往E上面加上127,故这里E的存储值为2+127=129)   011 0000 0000 0000 0000 0000(存储的就是有效数字M)

其连起来即为0 10000001 01100000000000000000000

举报

相关推荐

0 条评论