float窥探

本文通过一个C++程序实例,详细解析了IEEE标准下浮点数的二进制表示方法,包括符号位、指数偏移和有效数字位的存储及还原过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html这个博客内容,写了一个float窥探程序。

#include <bitset>
#include <iostream>

struct float_view {
    float_view(float a) {
        memcpy(this, &a, sizeof(a));
    }
    void show(){
        std::cout << "sign:" << (sign?'-':'+') << std::endl
                  << "exponent:" << int(exponent - 127) << std::endl
                  << "fraction:" << "1."<<std::bitset<23>(fraction) << std::endl;
    }
private:
    unsigned int fraction : 23;
    unsigned int exponent : 8;
    unsigned int sign : 1;
};

void main() {

    float a = 0.125f;
    float_view(a).show();
    system("pause");
    return;
}

浮点数要表示成计算机能理解的数据,要用到二进制科学计数法。

0.125换成二进制 ==> 0.001  。0.1表示0.5;0.01表示0.25;0.11111111111....无限接近1

0.001换成科学计数法==> +1.000 X 2^(-3)

正数sign=0,负数sign=1

指数部分-3+127=124为存储值,还原时要注意再减去127

有效值部分,因为必然是二进制1打头阵,所以存储时省略,还原时注意要再找回1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值