浮点型在内存中的存储

 


前言

浮点数,是一个计算机科学术语,指一种既包含小数又包含整数的数据类型。数据在内存中都是用

0与1存储,而浮点型这样包含小数部分的数据类型,由于计算机字长的限制,当需要表示的数据有很大的数值范围时,他们不能直接用定点小数或者定点整数表示。


提示:以下是本篇文章正文内容,下面案例可供参考

一、常见的浮点数

3.1415

2E10

浮点型:float    double  

二、浮点数储存示例

代码如下:

int main ()
{
        int n = 2 ;
        float * = ( float * ) & n
        printf ( "n 的值为: %d\n" , n );
        printf ( " *p 的值为: %f\n" , * p );
         * p = 2 .0 ;
        printf ( "n 的值为: %d\n" , n );
        printf ( "*p 的值为: %f\n" , * p );
        return 0 ;
}

如果不了解浮点型在内存中是怎么存储的,一般会认为结果依次为2   2.0f  2   2.0f 

而实际结果:

 

 

结果中有2个难以用整型或者其他数据储存的原理去解释,要解释清楚,必须了解国际标准IEEE(电气和电子工程协会) 754 

三 、IEEE745标准

根据IEEE745,任何一个二进制浮点数V可以表示成下面的形式:

                                V = \left ( -1 \right )^{S} \cdot M\cdot 2^{E}

其中:

(-1)^ S 表示符号位,例如,S=1, 表示负数,S=0,表示正数。

 M 表示有效数字,是 二进制位数 ,大于等于 1 ,小于 2
2^E 表示指数位,并且E为 无符号整数
举例说明:
V = 4.5 ,二进制表示为100.1 , 按照标准,S = 0 ,M=1.001, E=2;
                                  V = (-1)^{0}\times 1.001 \times 2^{2}
仅仅数学意义上的表达,还要进一步转化到内存上
IEEE 745规定:
参数所占bit数(对于32位)对于bit位数的二进制值
S1bit S
M23bit只取小数点后的位数,剩余位补0
E8bitE+=127, 再转化为二进制

参数所占bit数(对于32位)对于bit位数的二进制值
S1S
M11bit只取小数点后的位数,剩余位补0
E52bitE+=1023,  再转化为二进制

对于M:

IEEE 754 规定,在计算机内部保存 M 时,默认这个数的第一位总是 1 ,因此可以被舍去,只保存后面的xxxxxx部分。
比如保存 1.01 的时 候,只保存01 ,等到读取的时候,再把第一位的 1 加上去。
  这样做的目的,是节省1位有效数字。  
32 位 浮点数为例,留给M 只有 23 位, 将第一位的1 舍去以后,等于可以保存 24 位有效数字.
对于E:
IEEE745规定:

 

现在我们可以解释示例了:
n以整型形式存入内存为 :00000000000000000000000000001001,以%d形式输出,结果为9
float * = ( float * ) & n ;*p 把n的内存视为浮点型:0 00000000  00000000000000000001001
此时, S=0, E为全零,M=00000000000000000001001
以%f形式输出,S=0, E=-126, M = 0.00000000000000000001001 ,    结果为0;
*p = 2.0,以浮点型存入: S=0,   M=001.0,   E=1 
转为二进制(E+=127):  0  10000000  00000000000000000000000
以n的角度输出,视为补码,又因为是正数,补码为原码,直接输出十进制数:1037741824
才疏学浅,疏漏百出,如有问题,欢迎指出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值