69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
typedef union fu_s {
float f;
unsigned int u;
} fu_t;
int
main(int argc, char *argv[])
{
fu_t fu;
fu.f = 0.700012;
printf("%.24f\n", fu.f);
printf("%08X\n", fu.u);
return 0;
}
/* 输出为
0.700012028217315673828125
3F3333FD
说明: S-符号 E-阶码 F-尾数
3F 33 33 FD
0011 1111 0011 0011 0011 0011 1111 1101
0 01111110 011 0011 0011 0011 1111 1101
S E F
S = 0
E = 126 - 127 = -1
F = 1 + 2^-2 + 2^-3
+ 2^-6 + 2^-7
+ 2^-10 + 2^-11
+ 2^-14 + 2^-15
+ 2^-16 + 2^-17 + 2^-18 + 2^-19
+ 2^-20 + 2^-21 + 2^-23
= 1.40002405643463134765625
V = 1.40002405643463134765625 * 2^-1
= 0.700012028217315673828125
*/