`
weihe6666
  • 浏览: 440399 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

浮点数的二进制存储

    博客分类:
  • c
c 
阅读更多
-25的二进制存储方式 反码后+1 形成补码
3.5存储方式 浮点数的存储方式

12.5:
1. 整数部分12,二进制为1100; 小数部分0.5, 二进制是.1,先把他们连起来,从第一个1数起取24位(后面补0):
1100.10000000000000000000
这部分是有效数字。(把小数点前后两部分连起来再取掉头前的1,就是尾数)
2. 把小数点移到第一个1的后面,需要左移3位, 加上偏移量127:127+3=130,二进制是10000010,这是阶码。
3. -12.5是负数,所以符号位是1。把符号位,阶码和尾数连起来。注意,尾数的第一位总是1,所以规定不存这一位的1,只取后23位:
1 10000010 10010000000000000000000
把这32位按8位一节整理一下,得:
11000001 01001000 00000000 00000000
就是十六进制的 C1480000.

2.025675                                   
1. 整数部分2,二进制为10; 小数部分0.025675, 二进制是.0000011010010010101001,先把他们连起来,从第一个1数起取24位(后面补0):
10.0000011010010010101001
这部分是有效数字。把小数点前后两部分连起来再取掉头前的1,就是尾数: 00000011010010010101001
2. 把小数点移到第一个1的后面,左移了1位, 加上偏移量127:127+1=128,二进制是10000000,这是阶码。
3. 2.025675是正数,所以符号位是0。把符号位,阶码和尾数连起来:
0 10000000 00000011010010010101001
把这32位按8位一节整理一下,得:
01000000 00000001 10100100 10101001
就是十六进制的 4001A4A9.

-1.99744
还需要详细说吗?

如果只有小数部分,那么需要右移小数点. 比如右移3位才能放到第一个1的后面, 阶码就是127-3=124.

补充一个浮点二进制数手工转换成十进制数的例子:
假设浮点二进制数是 1011 1101 0100 0000 0000 0000 0000 0000
按1,8,23位分成三段:
1 01111010 10000000000000000000000
最后一段是尾数。前面加上"1.", 就是 1.10000000000000000000000
下面确定小数点位置。阶码是01111010,加上00000101才是01111111(127),
所以他减去127的偏移量得-5。(或者化成十进制得122,122-127=-5)。
因此尾数1.10(后面的0不写了)是小数点右移5位的结果。要复原它就要左移5位小数点,得0.0000110, 即十进制的0.046875
最后是符号:1代表负数,所以最后的结果是 -0.046875

还要注意其他机器的浮点数表示方法可能与此不同. 不能任意移植.

从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。
    任何数据在内存中都是以二进制(0或1)顺序存储的,每一个1或0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2字节)的short int型变量的值是1000,那么它的二进制表达就是:00000011 11101000。由于Intel CPU的架构原因,它是按字节倒序存储的,那么就因该是这样:11101000 00000011,这就是定点数1000在内存中的结构。
    目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:
````````符号位 阶码 尾数 长度
float    1     8    23   32
double   1    11    52   64
临时数   1    15    64   80
由于通常C编译器默认浮点数是double型的,下面以double为例:
共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:
    最高位63位是符号位,1表示该数为负,0正;
    62-52位,一共11位是指数位;
    51-0位,一共52位是尾数位。
^P
    按照IEEE浮点数表示法,下面将把double型浮点数38414.4转换为十六进制代码。
    把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理:
0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……
    实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了(隐藏位技术:最高位的1不写入内存)。
    如果你够耐心,手工算到53位那么因该是:38414.4(10)=1001011000001110.0110101010101010101010101010101010101(2)
(注:实际上我也没算到那么位,这个也只是意思一下,所谓的55 55 55 55 CD C1 E2 40 对应却是38414.4166666666642……)科学记数法为:1.001……乘以2的15次方。指数为15!
    于是来看阶码,一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023,在这里,15+1023=1038。二进制表示为:100 00001110
    符号位:正—— 0 !
    合在一起(尾数二进制最高位的1不要):
01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101
分享到:
评论

相关推荐

    浮点数二进制互转小工具

    标题"浮点数二进制互转小工具"指的是一个专门用于处理浮点数与二进制之间转换的应用程序。这个小工具能够帮助用户将浮点数(通常以double类型存在)转换成二进制形式,反之亦然。这对于学习计算机底层工作原理,或者...

    float浮点数二进制表示转换[源代码]

    根据IEEE 754标准,浮点数在计算机内部是以二进制形式存储的,这对于理解和优化计算过程至关重要。本文将深入探讨浮点数的二进制表示,并通过一个源代码实例介绍如何进行浮点数与二进制之间的转换。 浮点数的二进制...

    浮点数与二进制转换工具

    浮点数与二进制转换在计算机科学中是至关重要的概念,特别是在通信开发、数据存储和计算领域。本文将深入探讨浮点数和二进制之间的转换,以及如何利用工具进行这种转换。 浮点数是一种表示实数的方式,它允许在有限...

    如何转换浮点数的二进制格式为十进制

    本文将讨论如何将一个32位的浮点数二进制格式转换成十进制表示。 首先,我们需要了解浮点数在内存中的表示。32位浮点数,也称为单精度浮点数,由三部分组成:符号位(1位)、指数位(8位)和尾数位(23位)。符号位...

    浮点数的二进制转换

    最后,将符号位、阶码和尾数连起来组成完整的浮点数二进制表示。 浮点数的二进制转换可以分为以下几步: 1. 将浮点数分解为整数部分和小数部分。例如,浮点数 12.5 可以分解为整数部分 12 和小数部分 0.5。 2. 将...

    C# 浮点数与二进制之间的转换 源码

    然而,计算机内部是以二进制形式存储所有数据的,包括浮点数。了解浮点数与二进制之间的转换对于优化性能和理解底层机制至关重要。 标题“C# 浮点数与二进制之间的转换 源码”指的是一个C#程序,它提供了将浮点数...

    浮点数十六进制转换器V1.0绿色版.rar

    在IT领域,理解不同进制的转换是至关重要的,因为计算机内部存储和处理数据时通常采用二进制,而在人机交互界面中,我们更习惯于十进制或者十六进制的表示方式。这款绿色版的软件提供了便捷的转换功能,简化了这个...

    javaScript实现浮点数转十六进制字符

    JavaScript实现浮点数转十六进制字符的过程涉及到了浮点数的表示、IEEE 754标准、二进制与十六进制的转换等多个知识点。由于JavaScript直接使用浮点数转十六进制的功能实现并不直接,因此需要借助其他方法来实现。...

    浮点数与十进制数转换工具

    转换浮点数为十进制数涉及到将浮点数的二进制表示转换成我们熟悉的十进制形式。这个过程通常包括对指数的调整和尾数的除法运算。反之,将十进制数转换为浮点数则需要找到适当的指数和尾数,使得它们的乘积能最接近...

    单精度浮点数与十六进制转换_C语言程序

    3. **尾数位**(Fraction Bits):剩余的23位(第22到0位),用于存储小数点后的数字,实际上存储的是1加上这部分的二进制数。 ### 十六进制 十六进制是一种逢16进1的计数制,使用0-9和A-F共16个符号来表示数值,...

    IEEE浮点数计算机内二进制表示显示.vi

    描述中的重复信息"IEEE浮点数计算机内二进制表示显示.vi"强调了这个虚拟仪器的主要功能,即显示和理解IEEE 754标准下的浮点数二进制形式。在计算机科学中,浮点数的存储通常遵循IEEE 754标准,它定义了如何用有限的...

    浮点数十六进制转换器

    4. **浮点数到十六进制转换**:将浮点数转换为IEEE 754的16进制表示,首先需要按照标准格式分解浮点数,然后将各部分转换为二进制,最后将二进制转换为16进制。这个过程涉及对指数的偏移处理和尾数的规范化。 5. **...

    浮点数十六进制表示转换工具

    这种标准定义了浮点数如何在二进制系统中编码,进而可以转换为其他基数,比如16进制。 单精度浮点数(Single-precision floating-point format)使用32位来存储一个数值,其中: - 1位用于符号(Sign),0表示正,...

    C语言浮点数的二进制表示

    - **二进制表示**:计算机内部使用二进制形式存储所有数据,包括浮点数。 #### 整数的二进制表示 在C语言中,整数通常使用固定的位数表示,例如32位整数。一个简单的例子是整数9,在二进制中表示为`...

    IEEE754浮点数与十六进制转换,带4字节的顺序调整

    32位浮点数是IEEE 754标准中的一种,它使用32个二进制位来表示一个浮点数值,通常被称作单精度浮点数。 32位浮点数由三部分组成:符号位(1位)、指数部分(8位)和尾数部分(23位)。符号位决定数值的正负,0代表...

    浮点数十六进制转换器.zip

    浮点数在计算机内部是以二进制浮点数格式存储的,包括符号位、指数部分和尾数部分。在进行十六进制转换时,我们需要了解IEEE 754标准,这是浮点数表示的国际标准。根据这个标准,浮点数会被转换为一个特定格式的十六...

    C#浮点数和16进制字节数互相转换

    在C#编程语言中,处理浮点数与16进制表示之间转换是常见的任务,尤其是在数据存储、网络传输或二进制解析等场景。本文将深入探讨如何使用C#来实现单精度浮点数(Single)与16进制字符串的相互转换。 首先,我们需要...

    浮点数十六进制转换工具

    这个标准定义了二进制浮点数的存储格式,包括单精度(32位)和双精度(64位)两种。转换为十六进制可以帮助我们更直观地看到这些二进制结构。例如,一个单精度浮点数由符号位、指数部分和尾数部分组成,而在十六进制...

    浮点数与16进制转换(含源代码)_单片机_浮点数_转换_十六进制_实数_

    2. **浮点数到十六进制的转换**:转换过程首先将浮点数分解为其二进制表示,然后将指数和尾数转换为二进制形式,最后将二进制转换为十六进制。指数部分通常需要考虑偏移值,尾数部分则需要判断是否为规格化数并处理...

Global site tag (gtag.js) - Google Analytics