float数据在内存中是怎么存储的

float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
一个浮点数有2部分组成:底数m和指数e

底数部分 使用二进制数来表示此浮点数的实际值
指数部分 占用8bit的二进制数,可表示数值范围为0-255

但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
所以,float类型的指数可从-126到128

底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法。

格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数

举例:
17.625在内存中的存储

首先要把17.625换算成二进制:10001.101

整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。

在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 因为右移动了四位

这个时候,我们的底数和指数就出来了
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000

时间: 2024-10-24 06:08:39

float数据在内存中是怎么存储的的相关文章

float数据在内存中的存储方法

浮点型变量在计算机内存中占用4字节(Byte),即32-bit.遵循IEEE-754格式标准.一个浮点数由2部分组成:底数m 和 指数e.                          ±mantissa × 2exponent(注意,公式中的mantissa 和 exponent使用二进制表示)底数部分 使用2进制数来表示此浮点数的实际值.指数部分 占用8-bit的二进制数,可表示数值范围为0-255. 但是指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数.所以f

C/C++数据在内存中的存储方式

目录 1 内存地址 2 内存空间 ??在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学习VIPler的博文关于内存地址和内存空间的理解之后整理的,感谢VIPler提供学习资源. 1 内存地址 ??我们经常在书上或者网络上看到4位和8位的内存地址表示方法,比如0x0001或者0x00000001,为什么会有这两种区别呢? ??其实,这两种表示方法都是表示的编号为1的内存地址,都只是一个

【转】float类型在内存中的表示

http://www.cnblogs.com/onedime/archive/2012/11/19/2778130.html http://blog.csdn.net/adream307/article/details/7246993 http://wenku.baidu.com/link?url=Q_SYeQffEjdS1cpMXIRncmmhwKA_o2978-0ei1_gz9ym2vrmmBrSEZArpE6tR4yCB9PEHLG_FHRakijbr9-Y0DIK_MTjBUTKoXUh

小数在内存中是如何存储的?

小数在内存中是如何存储的? 文本关键字:小数.float.double.浮点数.精度 一.IEEE 754(二进制浮点数算术标准) 在学习进制转换时,我们了解到:我们经常使用的十进制数是转换为二进制进行存储的,只需要按照顺序将转换后的结果放在对应的位置上就行了.其实小数的存储也是基于二进制的,不过由于小数由整数部分和小数部分组成,为了方便表示和比较,会使用另外的方式来存储.IEEE 754是最广泛使用的浮点数运算标准,在标准中规定了四种表示浮点数值的方式: 单精度:32位 - 4字节 双精度:6

float类型在内存中的表示

先说一下计算机中二进制的算法: 整数 整数的二进制算法大家应该很熟悉,就是不断的除以2取余数,然后将余数倒序排列.比如求9的二进制: 9/2=4 余 1 4/2=2 余 0 2/2=1 余 0 1/2=0 余 1 一直计算到商为0为止,然后将得到的余数由下到上排列,就得到了9的二进制:1001. 从上面的算法我们可以看到,用整数除以2,最终都能够到0.因此,整数是可以用二进制来精确表示的. 小数 小数的二进制算法和整数的大致相反,就是不断的拿小数部分乘以2取积的整数部分,然后正序排列.比如求0.

C语言之查看数据在内存中表现形式

#include<stdio.h> void viewRAM(); void main() { viewRAM(); } //查看内存,打印内存地址 void viewRAM() { int b[5] = { 1, 2, 3, 4, 5 }; //打印内存地址 printf("%x", b); //注意:数组在内存中连续排列的 system("pause"); } 1,在打印内存地址代码后面,右键. 2,选择断点,插入断点. 3,这时断点已经生效. 4,

C语言 float、double数据在内存中的存储方式

float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit) 指数部分 指数位占8bit,可以表示数值的范围是0-255(表示0~255一共256个数),因为指数可正可负,所以IEEE规定,此处算出的次方必须减去127才是真正的指数,所以float的指数范围是 -127(0-127) 到+128(255-127). 底数部分 任何一个数的科学记数法都可以表示为1.xxx*2^n,小数部分就可以表示为xxx,整数部分永远是1,不影响精度,所以

Java语言中:float、double数据类型在内存中是如何存储的

引用参考 https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528 https://blog.csdn.net/yansmile1/article/details/70145416 java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储

深度剖析数据在内存中的存储2——浮点数数在内存中的存储

根据国际标准IEEE:任意一个二进制浮点数V可以表示为下面形式:(-1)^SM2^E:(-1)^S表示符号位,当S为0,V为正数:当S为1,V为负数.由其物理结构决定了,浮点数为有符号数.M为有效数字,大于等于1,小于2.2^E表示指数位.eg:5=>0101=>(-1)^01.012^2. S=0,M=1.01,E=2规定:对于32位的浮点数(单精度浮点数存储),最高1位是符号位(S),接着的8位为指数位(E),剩下的23位是有效数字位(M),不满23位后面补0.对于64位的浮点数(双精度浮