IEEE浮点数——打印浮点型数据的各个部分 共用体 + 位域
标准浮点格式
单精度浮点数值的分类
/* 打印浮点型数据的各个部分 * 共用体 + 位域 * 单精度浮点型 * 大端31 s符号 exp阶码 frac尾数 小端0 * 位数 1 8 23 * * 双精度浮点型 * 大端63 s符号 exp阶码 frac尾数 小端0 * 位数 1 11 52 */ #include <iostream> struct FloatInfo { // 小端存储 frac位于低23位 unsigned int frac : 23; unsigned short exp : 8; bool s : 1; }; union FloatU{ unsigned int i; float f; FloatInfo info; void printinfo() { // std::cout << "int:\t0x" << std::hex << i << std::endl; // std::cout << "float:\t" << f << std::endl; std::cout << "s\texp\tfrac\n" << std::hex << info.s << "\t0x" << info.exp << "\t0x" << info.frac << std::endl; } void printinfo(const char *s) { std::cout << "*********** " << s << " ***********" << std::endl; printinfo(); } } F; int main() { F.f = 3510593.0f; // csapp 练习题2.6示例 0x4a564504 3510593.0f // 大端 4 a 5 6 4 5 0 4 小端 // 0100 1010 0101 0110 0100 0101 0000 0100 // 0/ 1001 0100/ 101 0110 0100 0101 0000 0100 // s 0 exp 0x94 frac 0x564504 右侧对其 左侧补0 F.printinfo(); // exp frac // 0 0 0 F.info.exp = 0x00; F.info.frac = 0x00; F.printinfo("0"); // 最小非规格化数 0 0x00 00 00 01 F.info.exp = 0x00; F.info.frac = 0x01; F.printinfo("最小非规格化数"); // 最大非规格化数 0 0x1FFFFF F.info.exp = 0x00; F.info.frac = 0x1FFFFF; F.printinfo("最大非规格化数"); // 最小规格化数 1 0 F.info.exp = 0x01; F.info.frac = 0x00; F.printinfo("最小规格化数"); // 1 127 0 F.info.exp = 0x7F; F.info.frac = 0x00; F.printinfo("1"); // 最大规格化数 0xFE 0x1FFFFF F.info.exp = 0xFE; F.info.frac = 0x1FFFFF; F.printinfo("最大规格化数"); // INF 无穷 0xFF 0 F.info.exp = 0xFF; F.info.frac = 0x00; F.printinfo("INF"); // NaN 0xFF 非0 F.info.exp = 0xFF; F.info.frac = 0xFF; F.printinfo("NaN"); return 0; }
非负浮点数的示例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具