透过Bit Field(位字段)看内存

本文介绍了位字段(Bit Field)的概念,通过一个C语言的例子展示了如何利用位字段理解CPU的内存读写模式,特别是小端(Little-endian)存储方式。通过内存栈的分析,揭示了变量在内存中的存储顺序和值的表示。
摘要由CSDN通过智能技术生成


1. Bit Field 介绍

位字段是一个signed char、unsigned char、signed int、unsigned int 中一组相邻的位。位字段一个结构声明创建,该结构声明为每个字段提供标签,并决定字段的宽度(位数)。以 int 型为例,如:

struct Field{
unsigned int a : 1;  //a占1位
unsigned int b : 2;  //b占2位
unsigned int c : 2;  //c占2位
unsigned int d : 3;  //d占3位
};                   //共占了8位
struct Field field;
field.a = 1;         //a =  01 (二进制)
filed.b = 2;         //b =  10 (二进制)
filed.c = 3;         //c =  11 (二进制)
field.d = 3;         //d = 011 (二进制)  注意:赋值时不要超出字段的容量,如:d的最大值为7(111)

变量 filed 被存储在一个int大小的存储单元中,这个例子中仅有其中的八位被使用。
声明的总位数超过一个unsigned int 的大小,那将会使用下一个unsigned int 存储位置。不允许一个字段跨越两个unsigned int 之间的边界。编译器自动的移位一个这样的字段定义,使字段按unsigned int 边界对齐。发生这种情况时,会在第一个unsigned int 中留下一个未命名的洞(unnamed hole )。
可以使用未命名的字段“填充”(pad)未命名的洞。
如果使用一个宽度为 0 的未命名的字段,则迫使下一个字段与下一个整数对齐。如:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值