float (単精度浮動小数点数)の内部表現(ビットフィールドも使う)

ビットフィールドを使えばビット演算をしなくても任意のビットにアクセスできるのであった。

#include <iostream>
using namespace std;

int main(void) {
    struct each_part {
        uint32_t mantissa : 23;
        uint32_t exp_part : 8;
        uint32_t sign     : 1;
    };
    union float_internal {
        float f;
        uint32_t i32;
        uint8_t i8[4];
        each_part parts;
    };

    float_internal a;
    a.f = -123.456;
    printf("0x%X\n", a.i32);
    printf("0x%X, 0x%X, 0x%X, 0x%X\n", a.i8[0], a.i8[1], a.i8[2], a.i8[3]);

    printf("符号: 0x%X\n", a.parts.sign);
    printf("指数部: 0x%X\n", a.parts.exp_part);
    printf("假数部: 0x%X\n", a.parts.mantissa);

    return 0;
}

f:id:ti-nspire:20201106100439p:plain