
程序代码:
#include <cstdio>
#include <cstdint>
#include <cinttypes>
#include <bit>
int main( void )
{
    float a = 123.25f;
    printf( "float   %12g 占据 %zu 字节,它在内存中的数据是 0x%02hhX 0x%02hhX 0x%02hhX 0x%02hhX\n"
        , a
        , sizeof(a)
        , ((unsigned char*)(&a))[0]
        , ((unsigned char*)(&a))[1]
        , ((unsigned char*)(&a))[2]
        , ((unsigned char*)(&a))[3] );
    int32_t b = 1123450880;
    printf( "int32_t %12" PRId32 " 占据 %zu 字节,它在内存中的数据是 0x%02hhX 0x%02hhX 0x%02hhX 0x%02hhX\n"
        , b
        , sizeof(b)
        , ((unsigned char*)(&b))[0]
        , ((unsigned char*)(&b))[1]
        , ((unsigned char*)(&b))[2]
        , ((unsigned char*)(&b))[3] );
    int32_t c = (int32_t)a;
    printf( "将 float %g 转化成 int32_t 类型后,值为 %" PRId32 "\n", a, c );
    int32_t d = *(int32_t*)&a;
    printf( "将 float %g 所占内存当成 int32_t 类型格式,则值为 %" PRId32 " ------ 需要注意的是,这是未定义行为\n", a, d );
    int32_t e = std::bit_cast<int32_t>( a );
    printf( "将 float %g 所占内存当成 int32_t 类型格式,则值为 %" PRId32 " ------ 使用memcpy或std::bit_cast才是良好定义行为\n", a, e );
}
输出
float         123.25 占据 4 字节,它在内存中的数据是 0x00 0x80 0xF6 0x42
int32_t   1123450880 占据 4 字节,它在内存中的数据是 0x00 0x80 0xF6 0x42
将 float 123.25 转化成 int32_t 类型后,值为 123
将 float 123.25 所占内存当成 int32_t 类型格式,则值为 1123450880 ------ 需要注意的是,这是未定义行为
将 float 123.25 所占内存当成 int32_t 类型格式,则值为 1123450880 ------ 使用memcpy或std::bit_cast才是良好定义行为