给定实数,希望用IEEE32位浮点数表示,并将32位二进制用16进制表示。
一个非常非常巧妙的办法,将浮点数 float m 的4个字节32位的内存空间copy给整数x,
然后以16进制的方式打印整数x 即可;
printf("%lX", x) 中 %lX是以十六进制打印整数long,
变量x,使用long或者 unsigned int是因为有32位,如果用int32位有一位表示正负只有31位可用会不够。
#include <stdio.h>
#include <string.h>
int main() {
long n, x;
float m;
scanf("%d", &n);
while (n--) {
scanf("%f", &m);
memcpy(&x, &m, 4);
printf("%lX\n", x);
}
return 0;
}