浮点数的小数点是不固定的,如果每个人都按照自己的爱好存储在电脑里,那不就乱套了吗?那么怎么在计算机中存储这种类型的数字呢?象这类古老的问题前人早都为我们做好了相应的规范,无规矩不成方圆嘛。我们平时所说的浮点数的存储规范,就是由IEEE指定的,具体的规范文件是:IEEE Standard 754 for Binary Floating-Point Arithmetic。大家可以很容易的从网络上下载到这篇文档。
下面,偶就大致的描述一下,感兴趣的“同志”们可以阅读原文。
在c语言中,单精度(float)数据类型为32bits,具体的如图(1)所示:
整个32bits分三部分,即
Sign:符号位,1 bit,0为正,1为负;
Exponent(bias):指数部分,8 bits,存储格式为移码存储(后面还会说明),偏移量为127;
Mantissa(fraction):尾数部分。
对应的双精度(double)类型的格式如图(2)所示
同样,64位也被分为了三部分,对照单精度,不用我说就可以理解各个部分的含义了吧?
是不是有点迷糊了,不要怕,理论这个东西最能忽悠人了,看起来很高深,其实也就是个屁大的事,举个例子就很容易明白了。
举例说明,如3.24x103,则对应的部分为,Sign为0,3为指数部
(注意计算机里面存储的不是3,这里仅仅为了说明),3.24为尾数。我们知道,计算机“笨”的要死,只认识0和1,那么到底一个浮点数值在计算机存储介质中是如何存储的呢?
例如,我们要想偷窥浮点类型的值4.25在计算机硬盘中存储的庐山真面目,请跟我来:首先把4.25转换成二进制的表达方式,即100.01,在详细点,变成1.0001x22,好了,对号入座把。
Sign=0;
Exponent(bias)=2+127=129 (偏移量为127,就是直接加上个127了);
Mantissa=1.0001-1.0=0001(规格化后,小数点前总是整数1,全世界人都知道前面是1不是0,所以省略不写了,即尾数部分不包括整数部分;当别人问你,为什么23 bit的尾数部分可以表示24位的精度,知道怎么回答了吧。什么,没有看懂,再仔细读两便就知道了)。
对照图(3)所示,相信你已经看明白了吧?相信你的智商。为了加深认识,再来一个。如果给定你一个二进制数字串,01000000100010000000000000000000,并告诉你这是一个float类型的值,让你说出它是老几,知道怎么算了吧?如果不知道,看图(4),我就不废话解释了。
-----------------------------------------------------
作者:afreez 北京-中关村
联系方式:afreez.gan@gmail.com (欢迎与作者交流)
初次发布时间:2006-12-19
初次发布在:
http://blog.csdn.net/ganxingming/ -----------------------------------------------------
ps:大家可以在汇编中定义个data,里面这样定义dd 4.56
然后可以在内存中查看存储的结果。
相关推荐
总之,C语言中的浮点数存储和比较涉及到了计算机科学的基础原理和编程实践,理解并掌握这些知识,将有助于我们编写更加健壮和精确的代码。通过深入学习和实践,我们可以更好地应对浮点数带来的各种挑战。
标题中的“IEEE754浮点数存储”指的是在计算机科学中用于表示和存储浮点数的国际标准,由IEEE(电气和电子工程师协会)制定。这个标准详细规定了单精度(single-precision)和双精度(double-precision)浮点数的二...
C语言中浮点数存储异常的研究与实践 本文主要讨论了C语言中浮点数存储异常的问题,通过对浮点数存储方式的分析,指出了浮点数在C语言编程过程中出现的不足,并采取了3种方法巧妙地进行弥补和解决,对C语言学习者有...
用浮点数存储方式表示整数数值,用十六进制表示浮点数
浮点数在计算机内存中的存储格式 浮点数在计算机内存中的存储格式对浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储。...符号位、指数位和尾数部分都是浮点数存储的必要组成部分。
### 浮点数存储格式详解 #### 一、引言 在编程中,尤其是在C语言这类广泛使用的编程语言中,浮点数是非常重要的数据类型之一。它们被用来表示那些具有小数部分的数字,这对于科学计算、金融计算以及其他需要高精度...
1. **浮点数的表示**:浮点数在计算机内部通常按照IEEE 754标准存储,分为单精度(32位)和双精度(64位)两种格式。单精度浮点数由1位符号位、8位指数位和23位尾数组成;双精度则有1位符号位、11位指数位和52位尾数...
#### 单精度浮点数存储格式 单精度浮点数(`float`)采用32位存储,具体分布如下: - **符号位**(1位):最高位。 - **指数位**(8位):次高位,采用偏移量127的补码存储方式。 - **尾数部分**(23位):剩余位...
IEEE754 的浮点数存储格式对浮点数的表示方法进行了规定。浮点数可以分为三部分:符号位、指数位和尾数位。符号位用于表示浮点数的正负号,指数位用于表示浮点数的指数,尾数位用于表示浮点数的小数部分。 在 IEEE...
然而,浮点数在内存中的存储方式并非直观,而是遵循一套标准的规则,这就是我们常说的浮点数存储格式。这里我们将深入探讨这一主题。 首先,我们需要了解的是IEEE 754标准。这是国际电工委员会(IEEE)制定的一套...
从给定的文件信息中,我们可以提炼出关于浮点数存储的关键知识点,特别是单精度浮点数(通常称为float)的存储方式。以下是对标题、描述以及部分内容中提及的知识点的详细阐述: ### 浮点数存储原理 浮点数在...
浮点数在计算机内部是以二进制形式存储的,这可能导致在进行浮点运算时出现精度损失。通常,`float`和`double`类型都有一定的精度限制,其中`float`大约能精确到7位小数,而`double`则更精确,但也不是无限的。 ...
### 浮点数存储格式详解 #### 一、引言 在计算机科学领域,浮点数的存储格式是一项至关重要的技术。随着计算机系统的不断发展和完善,浮点数的表示方法也经历了多次变革。其中,最广为人知的标准莫过于IEEE 754...
`fstp`不仅将栈顶的浮点数存储到指定地址,还会弹出栈顶的浮点数,清理FPU的栈。 在实际编写代码时,还需要考虑以下几点: - **精度问题**:IA-32的FPU支持单精度(32位)和双精度(64位)浮点运算。选择哪种精度...
与32位浮点数类似,将一个实数转换为64位浮点数存储形式,也需要将指数部分减去偏移量1023,然后转换小数部分为52位二进制小数。 在实际应用中,用户可能需要将一个32位浮点数转换为64位浮点数,或者反过来进行。这...
本文将详细探讨如何实现四字节十六进制字符串与浮点数之间的相互转换,涵盖直接方法、强制类型转换法以及使用union和struct的方法。这三种方法都已通过实际验证,确保其正确性和有效性。 首先,我们来看直接方法。...
- **9.87654321 > 9.87654322不成立**:这是由于浮点数存储机制的原因,两个数在二进制表示下可能非常接近,以至于比较时出现了误差。 - **10.2 - 9的结果不是1.2而是1.1999998**:同样,这是因为10.2和9在二进制...
在编程实践中,理解浮点数存储格式和C语言的运算规则对于编写准确可靠的程序至关重要。当涉及到需要高精度的浮点计算时,程序员应特别注意数据类型的转换,并使用适当的方法来确保精度。此外,了解IEEE754标准和...
为了将浮点数保存到EEPROM中,需要了解浮点数的存储格式。浮点数的存储格式遵循IEEE-754标准,规定了单精度浮点数用4字节存储,双精度浮点数用8字节存储。浮点数可以分为三个部分:符号位、阶和尾数。符号位用来表示...
2. 双精度浮点数与PLC的数据处理能力:流量仪表等智能设备通常使用双精度浮点数存储数据,但由于S7-200 PLC只能处理单精度浮点数,因此无法直接使用这些双精度仪表数据,这限制了PLC进一步的数据处理及应用。...