C语言位域:把变量拆成二进制位看
调试的时候经常想看一个变量在内存里的二进制到底长什么样——特别是学 float 的 IEEE 754 表示、研究位运算的时候。这个需求用 C 语言的**位域(bit field)+ 联合体(union)**就能优雅解决,我做成了一个测试库并开源:
GitHub:https://github.com/COSMICAL-CONTAINER/C_Program-Test.h
思路:union + 位域
核心是一对搭档:
- union:让同一块内存既能按整体读写(
all),又能按位读写(decode) - 位域:把一个字节拆成 8 个 1 bit 的成员
char 的拆解结构:
1 | typedef struct _data_char_structTypDef |
int/float 等 32 位类型则是 4 个 char 联合体的嵌套(byte0~byte3,每个 byte 再拆 8 位)。
解码函数
1 | void decode_char(char data_char) |
使用:
1 | char char_A = 'A'; |
不止能看,还能改
union 的好处是双向的:按位置 1 之后,读 all 就是改好的值:
1 | int a = 0; |
float 的 IEEE 754 查看
float 在内存里就是 4 个字节的 IEEE 754 编码。把它按 int 的位域解读,符号位、指数、尾数一目了然:
1 | float f = 123456789.123456789; |
效果图

说明
- 解码顺序是 bit7 → bit0(符合二进制的书写习惯)
- 只依赖标准库,GCC / MSVC 都能编译
- 已开源:https://github.com/COSMICAL-CONTAINER/C_Program-Test.h
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 寰宇体的世界!
评论
GiscusTwikoo
