欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浮点型在内存中的存储

程序员文章站 2024-03-18 17:54:16
...

以单精度类型变量为例

   1.国际标准IEEE(电气和电子工程协会)754,任意一个浮点数都可以表示为(-1)^S*M*2^E,其中
   (1)S表示符号位,当数据为负时S = 1,当数据为正时S = 0;
   (2)M表示有效数字位,它在内存中占据23个比特位,它的取值范围是大于等于1,小于2,而计算机对M进行存的时候只存小数点后的数据,所以程序员在进行取数据时必须给其加1,而计算机在进行存的时候必须将其小数点前的1减掉;
   (3)E代表指数位,它是一个无符号数,所以程序员将E从内存中取出时必须减去127,而将E存入内存中时必须加上127。

浮点型在内存中的存储

2.IEEE的几种特殊规定

   (1)对于E全为0的时候,取出来的数据便应该是-127,这个时候也就意味着指数为-127,而有效数字为1点几,再乘以一个2^-127,此时会是一个特别小的数据,标准规定,此时数据便是0
   (2)对于E全为1时,表示数据为无穷大(小),具体得看数据的符号位
   (3)对于不全为0或者不全为1,数据的存取遵守1

3.练习题

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int num = 9;
    float *p_float = (float*)&num;
    printf("num = %d\n", num);
    printf("*p_float = %f\n", *p_float);
    *p_float = 9.0;
    printf("num = %d\n", num);
    printf("*p_float = %f\n", *p_float);
    return 0;
}

浮点型在内存中的存储

对上述练习题的解析:
int num = 9;
在计算机内存存储形式为:0000 0000 0000 0000 0000 0000 0000 1001,此时E全为0,所有打印出来的浮点数为0
*p_float = (*float)&num;
(-1)^0*1.001*2^3
0   1000 0010   001 0000 0000 0000 0000 0000
由上比特位序列可知,打印出来的浮点数位9,整数为一个巨大的数字

3.双精度只是中间数由127变为1023,其他的都不变,这里不再做叙述

相关标签: 浮点型的存储