10710
题目
编写程序,使用联合体实现一个简单的类型转换器,能够查看整数的浮点数表示,以及浮点数的二进制位表示。
解析
联合体的所有成员共享同一段存储。写入一个成员后,可以观察相同对象表示在另一个成员类型下对应的比特模式。实际解释结果依赖实现的浮点格式和整数宽度。
答案
c
#include <stdint.h>
#include <stdio.h>
union bits32 {
uint32_t u;
float f;
};
static void print_bits(uint32_t x) {
for (int i = 31; i >= 0; --i) {
putchar((x & (UINT32_C(1) << i)) ? '1' : '0');
if (i % 4 == 0) {
putchar(' ');
}
}
putchar('\n');
}
int main(void) {
union bits32 v;
if (scanf("%f", &v.f) != 1) {
return 1;
}
printf("as uint32_t: %u\n", v.u);
print_bits(v.u);
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29