首页
学习
活动
专区
圈层
工具
发布

浮点数与双进度浮点数的存储

一、引言 上期我们讲到数据的存储,那很多同学就对单精度浮点数与双精度浮点数有疑问了,正负号用最前头的二进制位充当符号位,那单精度浮点数和双精度浮点数又是哪一位二进制位充当充当小数点位又是如何通过二进制存储小数以及为什么单精度浮点数和双精度浮点数存储时内存数据会发生部分丢失...大端字节序列:将数据高位字节存储到低位字节,将数据低位字节存储到低位字节。 小端字节序列:将数据高位字节存储到高位字节,将数据低位字节存储到低位字节。...单精度浮点数和双精度浮点数就是以科学计数法方式存储单精度浮点数和双精度浮点数。我们用科学计数法表示十进制数字时,表示形式为:a X 10^n(0浮点数和双精度浮点数的二进制表示形式为:a X 2^n (0浮点数与双精度浮点数在内存中的存储方式 单精度浮点数与双精度浮点数在内存中二进制中存储: 存储形式:V=(-1)^S X 2^E X M(为了方便大家看得懂所以John将2^E与M调换) 为了方便保存

24710

C语言之浮点数的存储

C语言中,有两种类型的浮点数:32位的float和64位的double,而在计算机中存储的是用二进制的科学计数法(即基数为2)表示的值 例如100=1100100B=1.1001B*26,123.456...既然基数固定为2,尾数的整数部分固定为1,那存储时就可以省略掉它俩了,只需要存储另外三个信息:正负符号+指数+尾数的小数部分 float:符号占1位,指数占8位,尾数小数占23位; double:符号占...1位,指数占11位,尾数小数占52位 不过指数也有正负,因此存储时加个偏移来表示。...再看一个纯小数的存储,例如0.00123456,这次倒着推导一下 ? 计算机中存储的是983683318,转换为二进制就是00111010101000011101000011110110B。...计算机里存储的是两个32位数:1079958831(高)、446676599(低) ?

2K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    浮点数在内存中的存储

    浮点数在内存中的存储详解 我们知道, 计算机内部实际上只能存储或识别二进制。...我们日常使用的 浮点数 也不例外, 最终也要被存储到这样的二进制小格子中。(来源于知乎) 对于整形来说:数据存放内存中其实存放的是补码。 那么,对于浮点数来说,在内存中是如何存储的呢?...,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M 对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M 下面用图来理解以下上述的IEEE...例如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001 保存如下 此外,指数E还有一个重点,不能存储为全0或者全1!...好了,阿豪今天的分享就到这了,点个关注不迷路哦!

    58710

    浮点数在内存中的存储

    常见的浮点数:3.14159、1E10等,浮点数家族包括: float、double、long double 类型。...浮点数表示的范围: float.h 中定义 根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式:  V  =  (−1) ^S*M ∗ 2^ E •  M表示符号位...IEEE 754规定: 对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M 对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52...位存储有效数字M   浮点数存的过程 IEEE 754 对有效数字M和指数E,还有一些特别规定。         ...,就成了 0.000000  9以整型的形式存储在内存中,得到如下二进制序列: 0000 0000 0000 0000 0000 0000 0000 1001 首先,将 9 的二进制序列按照浮点数的形式拆分

    75110

    浮点数在内存中的存储

    如果通过整数的存储形式,上述代码运行结果是9  9.000000  9   9.000000 结果并非如此,我们可以知道,浮点数和整数的存储形式是不同的。...一,浮点数的存储  根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式: V=(-1)^s*M*2^E (-1)^s表示符号位,当s=0时,V为正数;当s=...s=1,M=1.01,E=2; IEEE 754规定: 对于32位的浮点数(float),最高的一位存储符号位s接着的8位存储E,剩下的23位存储有效数字M 对于64位的浮点数(double),最高的一位存储符号位...s,接着的11位存储E,剩下的52位存储有效数字M  二,浮点数存的过程 浮点数在存的过程中,实际上是存s M E....而在*pFloat视角,它认为存储的是一个浮点数,这个浮点数的E全为0,真实的E是1-127=-126,认为它是一个很小接近于0的数字,所以打印出的结果是0.000000。

    60110

    浮点数在内存中的存储

    浮点数在内存中的存储 常见的浮点数: 3.14159 , 1E10等, 浮点数家族包括 : float , double , long double类型....要理解这个结果,⼀定要搞懂浮点数在计算机内部的表示方法。...例如 5.5在内存中的存储为101.1, 怎么来的呢? 请看下图小数转化为二进制在内存中的权重....浮点数取的过程 指数E从内存中取出的过程可以再分为三种情况: E不全为0不全为1 这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第⼀位的1....9以整型的形式存储在内存中,得到如下⼆进制序列: 0000 0000 0000 0000 0000 0000 0000 1001 首先,将 9 的二进制序列按照浮点数的形式拆分,得到第⼀位符号位s=0,

    53910

    浮点数在内存中的存储

    一、用科学计数法存储小数 一个小数,如5.5,它在存储进入计算机之前会先转化成科学计数法的形式,先将5.5转化为二进制形式,即101.1,接着转化成科学计数法的形式便是1.011*2²,再进一步转化为国际标准...(1)国际标准IEEE 根据国际标准 IEEE (电气和电子工程协会) 754 ,任意一个二进制浮点数 V 可以表示成下面的形式: V=(-1)^S * M * 2^E ,为什么是2^E呢?...1.00011*2³ 转IEEE,是正数,S=0,M=1.00011,E=3即(-1) ^0 *1.00011* 2^3 (套公式接下来也不写了...*2² 转IEEE,为负数S=1,M=1.10001,E=2 练习部分就结束了,相信大家对于小数转为 国际标准IEEE的形式已经有所了解,接下来进入本文的重点部分,浮点数在内存中的存储...二、浮点数在内存中的存储 浮点数数据在32位的处理器上最高的1位存放符号位(S) 接着的后

    70510

    整数和浮点数在内存的存储

    字节在超过数据存储的时候就会有存储顺序的问题,在不同的存储顺序,我们分为大端存储和小端存储。 大端存储:低位字节数据存储在高地址处,高位字节数据存储在低地址处。...因此就导致了⼤端存储模式和⼩端存储模式。 2.整型在内存的存储 整型在内存的存放模式就是二进制的补码来进行存储的 在计算机系统中,数值⽤补码来表⽰和存储。...pf = 7.0; printf("n的值为:%d\n", n); printf("*pf的值为:%f\n", *pf); return 0; } 我们可以看出为什么输出没有正确的打出对应的数值 浮点数在计算机内部的表...⽰⽅法是根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式: V = (−1) 的s次方∗ M ∗ 2的E次方 • (−1) S 表⽰...规定: 对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M 对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字

    25610

    整数和浮点数在内存中存储

    整数在内存中的存储         整数的二进制以 原码 反码 补码 表示.        ...00001000         补码:00001000           -8的存放         原码:10001000         反码:11110111         补码:11111000  浮点数在内存中的存储...        常见的浮点数 1.23 1E5等,浮点数家族包括:float double long double   ( 它们的范围在float.h中定义)         它们的存储按照 IEEE754...101.0 = 1.01 * 2^2                -5.0 = -101.0 = -1 * 1.01 * 2 ^ 2         由IEEE 754规定         32位的浮点数这样储存...         64位的浮点数这样储存 注意 :           在对E存储的时候,要加上中间值127,然后表示成二进制码储存 而储存M的时候,尾数要去整数部分,然后补齐0到23位

    46910

    整数和浮点数在内存中存储

    整数在内存中的存储: 整数的2进制表⽰⽅法有三种,即原码、反码和补码整数的2进制表⽰⽅法有三种,即原码、反码和补码。...浮点数在内存中的存储: #include int main() { int n = 9; float* pFloat = (float*)&n; printf("n的值为:%...下面我们就来详细的讲讲浮点数在内存中的存储。 要理解这个结果,⼀定要搞懂浮点数在计算机内部的表⽰⽅法。...对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M 对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M我们就可以有如下的图来表示...9以整型的形式存储在内存中,得到⼆进制序列: 1 0000 0000 0000 0000 0000 0000 0000 1001 ⾸先,将 9 的⼆进制序列按照浮点数的形式拆分,得到第⼀位符号位s=0,

    52410

    数据在内存中的存储——浮点数

    那么到这我们就应该想一下,到底是为什么,难道是之前对于整型的存储的理解到浮点数就不同了?难不成浮点数的存储方式,和我们想的完全不一样吗?...那么,S=1,M=1.01,E=2 同时IEEE754规定: 1、对于32位的浮点数来说,最高位的1位存储的是符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。...2、对于64位的浮点数来说,最高位的1位存储的是符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。...其实,由于n是整型,所以在存储的时候就会是32个比特,会是 0000 0000 0000 0000 0000 0000 0000 1001 那么变为浮点数的时候,第一位是S=0,E=0此时应该是上面的...E全为0的时候,应该是一个很小的数字,所以才会导致最后的结果是0.0000000 看第二部分 既然是浮点数的指针,那么存储的时候会是什么呢?

    67910

    整数和浮点数在内存中的存储

    3.浮点数在内存中的存储 先看下面一段代码的输出结果是什么?...对于上面的问题,其实就是关于浮点数在内存中的存储方式。下面就来讲讲浮点数在内存中究竟是如何存储的。...3.1浮点数的存储 根据国际标准IEEE(电⽓和电⼦⼯程协会) 754,任意⼀个⼆进制浮点数V可以表示成下面的形式: • (−1)S 表示符号位,当S=0,V为正数;当S=1,V为负数 • M 表示有效数字...IEEE 754规定: 对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M 对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字...首先看9是如何存储在内存中的 0000 0000 0000 0000 0000 0000 0000 1001 然后,将 9 的⼆进制序列按照浮点数的形式拆分,得到第一位符号位s=0,后面8位的指数

    85810

    杂谈c语言——6.浮点数的存储

    1.浮点数在内存中的存储 常⻅的浮点数:3.14159、1E10等,浮点数家族包括: float、double、long double 类型。...答案是: 1.2 浮点数的存储 上⾯的代码中, num 和 *pFloat 在内存中明明是同⼀个数,为什么浮点数和整数的解读结果会差别 这么⼤?...就相当于(-1)的0次方*1.011*10的2次方 所以: S==0; M==1.011; E==2; 浮点数的存储,就是存储S,M,E相关的值 !!!!!!...IEEE754规定: 1.对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M                                                 ...float类型浮点数内存分配 2.对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M

    70210

    整数和浮点数在内存中的存储

    char类型为一个字节,以char类型为例; 有符号整形signed char取值范围:-128~127; 无符号整形unsigned char 取值范围:0~255; 浮点数在内存中的储存...浮点数的存储 浮点数的表示方式: V:(-1)^s*M*2^E 例:3.5二进制表示(-1)^0*1.11*2^1 s=0,M=1.11,E=1 (-1)^s:表示符号位,当s=0时,V为正数...,当s=1时,V为负数; M :表示有效数字,取值范围为1<=M<2; 2^E:表示指数位 浮点数的储存就是与S、M、E相关的值 ​​​E754 IEEE754规定 对于32位浮点数(float):最高的一位存储的符号位...S,接着的8位存储指数E,剩下的23位存储有效数字M 对于64位浮点数(double):最高的一位存储的符号位S,接着的11位存储指数E,剩下的52位存储有效数字M E是无符号整形 E为8位时,取值范围为...0~255; E为11位时,取值范围为0~2047; 但在科学计数法中,E可以是负数,所以要加上一个中间值,8位的中间值为127,11位的中间值为1023 浮点数读取的过程 E不全为0或不全为1时:指数

    65910

    整数与浮点数在内存中的存储

    整形数据类型的存储(通常存的是二进制的补码) 大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,存储在内存的低地址处。...浮点数在内存中的存储 浮点数家族成员:float,double,long double类型。...整数与浮点数在内存中的存储是有区别的,下面我们具体来看看浮点数的存储方式: #include int main() { int n = 9; float *pFloat = (float...IEEE754规定: 对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M  对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字...⽐如,2^10的E是 10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。 值得一提的是,由于浮点数的特殊存储方式,浮点数在内存中有可能存在无法精确存储的问题。

    59310

    MySQL浮点数与定点数

    在MySQL中float和double用来表示浮点数。 ? 定点数不同于浮点数,定点数实际上是以字符串形式存放,所以定点数可以更精确地保存数据。...如果实际插入的数值精度大于实际定义的精度,则MySQL会进行警告(默认的SQLMode下),但是数据按照实际精度四舍五入后插入;如果SQLMode是在TRADITIONAL(传统模式)下,则系统会直接报错...在MySQL中,decimal(或numberic)用来表示定点数。 ? ---- 浮点数与定点数的区别,看一个例子 ? ? ?...因此在精度要求比较高的应用中(比如货币)要使用定点数而不是浮点数来保存数据 在今后关于浮点数和定点数的应用中,需要考虑到以下几个原则 浮点数存在误差问题 对货币等,对精度敏感的数据,应该用定点数表示或存储...在编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较 要注意浮点数中一些特殊值的处理

    1.6K20

    C语言中的浮点数存储:深入探讨

    2.1 单精度浮点数(32位) 单精度浮点数使用32位存储,其中包括: 符号位:1位 指数位:8位 尾数:23位(实际尾数有24位,因为有一个隐含的1位) 单精度浮点数的存储格式如下: 对于32位的浮点数...:11位 尾数:52位(实际尾数有53位,因为有一个隐含的1位) 双精度浮点数的存储格式如下: 对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M 。...内存中的浮点数存储 浮点数在内存中的实际存储取决于系统的字节序(大端或小端)。例如,在大端系统中,较低位字节存储在较高内存地址。...总结 C语言中的浮点数存储是一个复杂而重要的主题。它涉及到符号位、指数位和尾数的详细布局,以及IEEE 754标准的规范。通过理解浮点数的存储机制,你可以更好地处理浮点数的计算和调试问题。...希望本文对你理解C语言中的浮点数存储有所帮助。

    98210

    【C语言进阶】内存中浮点数的存储规则

    二、 浮点数在内存中的存储是怎样的 2.1 引例 浮点数的存储规则: 举例来说: 有效数字M和指数E的特别规定 验证浮点数是不是这样存储的 2.2 指数E的三种情况 (1) E不全为0或不全为1 (2)...但是你们知道在内存中是怎么存储的吗? 一、什么叫做浮点数? 在生活中我们常见的浮点数: 3.14 1E10 这种科学计数法:由于小数点可以左右移动,所以我们称为浮点数。...接下来就要了解一下浮点数的存储方式大家就明白了。...5.5的存储是不是我们上面代码计算那样 这时我们可以看到内存中的确是按这种方法存储的 由于在这里是小端存储所以16进制是反着存的 2.2 指数E的三种情况 (1) E不全为0或不全为1 这时,浮点数就采用下面的规则表示...什么是浮点数 浮点数的存储规则 浮点数在内存中的存储模型 在IEEE 电气电子工程师协会中关于 指数E 和 有效数字M的规定 指数E的3种情况 希望大家有所收获呢。

    96710
    领券