浮点型在内存中的存储
程序员文章站
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*)#
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)#
(-1)^0*1.001*2^3
0 1000 0010 001 0000 0000 0000 0000 0000
由上比特位序列可知,打印出来的浮点数位9,整数为一个巨大的数字
3.双精度只是中间数由127变为1023,其他的都不变,这里不再做叙述
上一篇: 用C语言实现strcat函数
下一篇: C++输入输出流(读取,写入,复制文件)
推荐阅读
-
CSAPP——数据在计算机内部的表示(整型与浮点型)
-
关于浮点型数据在printf函数中的输出方式
-
浮点型在内存中的存储
-
java中的各种数据类型在内存中存储的方式 博客分类: java java内存虚拟机
-
创建一个Test类,包含有一个public权限的int型成员变量与一个char类型的成员变量,观察在main方法中的初始值
-
牛客网华为机试【求int型正整数在内存中存储时1的个数】
-
6. Java中的数据类型---整型、浮点型、字符型、布尔型
-
【转载】数组在内存中的存储方式
-
在MySQL中创建带有IN和OUT参数的存储过程的方法
-
vuex-along解决vuex中存储的数据在页面刷新之后失去的问题