简要记录浮点型数据的二进制存储格式

 简要记录浮点型数据的二进制存储格式   by斜风细雨QQ:253786989    2012-03-14

  浮点数包括floatdouble两种类型,float32位,double64位。其二进制存储格式遵循IEEE754标准。以float为例:

 

  符号位:正数为0,负数为1

  以float型数据123.456为例,分析其二进制存储格式:

  首先将十进制数123.456转换为二进制数为:1111011. 01110100101111001 

  (其中0.456如何转换为二进制?不断乘以2…)

  1111011. 01110100101111001 1. 11101101110100101111001乘以26次方

  首先这是一个正数,则符号位为0

  阶码为6,不过要转换成移码。

  (如何求6的移码?这里我也不太深究,我见大家都是直接6+127=133,换为2进制为10000101

  尾数则为1.11101101110100101111001的小数部分,即

  11101101110100101111001

  综上:123.456的二进制存储格式为:01000010111101101110100101111001

  用一段代码来验证一下:

#include <cstdlib>
#include <iostream>

using namespace std;

void printBinary(const unsigned char val) 
{
    for(int i = 7; i >= 0; i--)
        if(val & (1 << i))
            std::cout << "1";
        else
            std::cout << "0";
}

int main() 
{
    float d = 123.456;
    unsigned char* cp = reinterpret_cast<unsigned char*>(&d);

    for(int i = sizeof(float)-1; i >= 0 ; --i)
    {
        printBinary(cp[i]);
    } 

    system("PAUSE");
} 

  要注意的是,X86架构为小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中。所以上面的for(int i = sizeof(float)-1; i >= 0 ; --i)先打印高地址部分,即二进制的高字节数据。

  程序的执行结果:

 

  01000010111101101110100101111001

  对比一下刚才的分析结果是相同的。

  double类型和float类型的二进制存储格式是同样的道理。

 简要记录浮点型数据的二进制存储格式   by斜风细雨QQ:253786989    2012-03-14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值