输出浮点数的二进制机器码并提取出指数位、输出阶码真值

#include <iostream>
#include <cstring> // for memcpy
#include <cstdint> // for uint32_t
#include <bitset>
using namespace std;

uint8_t extractExponent(float value) {
    uint32_t intRepresentation;
    memcpy(&intRepresentation, &value, sizeof(float));
    
    // 提取指数位
    uint8_t exponent = (intRepresentation >> 23) & 0xFF;
    cout << bitset<32>(intRepresentation) << "dddd" << endl;
    
    return exponent; // 返回提取的指数
}

int main() {
    float number = 33; // 示例浮点数

    // cout << "number is: " << bitset<sizeof(float) * 8>(number) << endl;  
    // 这样写是不对的,因为bitset需要的是一个整型,而传入的是一个float,这会导致std::bitset尝试将float先转换为int
    // 所以3.14的话,会先自动转成3,然后再输出3的机器数

    // 输出浮点数的二进制机器码
    uint32_t bits;
    memcpy(&bits, &number, sizeof(float));
    cout << "number is: " << bitset<32>(bits)<< endl;

    // 输出浮点数的阶码真值(移码-127)
    uint8_t exponent = extractExponent(number);
    cout << "Exponent of " << number << " is: " << bitset<8>(exponent) << ", " << static_cast<int>(exponent)-127 << endl;
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值