bit fields 总结
2014-06-27 11:19
49 查看
位域的定义与结构体的定义相似,其一般形式如下:
struct 位域结构名
{
位域列表
};
其中位域列表的形式为:
类型说明符 位域名:位域长度
例如:
struct data
{
unsigned int a:2;
unsigned int b:3;
unsigned int c:3;
};
其中a表示data的低两位,表示data的3~5为,c表示data的6~8位。
关于位域的定义,有一些问题需要注意:
第一,个位域必须存储在同一个字节中,不能跨两个字节。请读者看下面的例子:
struct data
{
unsigned int a:2;
unsigned int b:4;
unsigned int c:3;
};
在这个例子中,域名a、b占用6个位,域名c占3个位,这样1个完整的字节就没法存储a、b和c,c就得跨两个字节,这是不允许的。当一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。可以使用下面的方式,来解决这个问题。
struct data
{
unsigned int a:2;
unsigned int b:4;
unsigned int : 0 // /*空域*/
unsigned int c:3;
};
这样修改后,a占第一个字节的2位,b占接下来的4位,剩余的2位用0填充,表示不用。c会从第二个字节开始存储。
第二、位域的占用的位数,不能超过8个二进制位
前面已经提到了,位域不允许跨字节,当然位域的长度不能大于一个字节的长度。
第三、允许位域无域名
前文已经提到了,为了使某个域名从新的一个字节开始,可以使用无名的域来填充,做一下调整。要注意的是,无名的位域是不能使用的。
从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。
总结:
bit fields初始化时注意: 其是对位进行操作的,赋值时应该当小于其最大值(如果大于,那它的值不会有规律的推出下个 bit 的值。如 .a =10, 则.b不能确定)
2:bit fields 结构体,内存分配给其的空间 不是 按 bit域的大小 来确定的。 还是按照 一般的结构体 那样 类型内存 对齐 分配。
struct 位域结构名
{
位域列表
};
其中位域列表的形式为:
类型说明符 位域名:位域长度
例如:
struct data
{
unsigned int a:2;
unsigned int b:3;
unsigned int c:3;
};
其中a表示data的低两位,表示data的3~5为,c表示data的6~8位。
关于位域的定义,有一些问题需要注意:
第一,个位域必须存储在同一个字节中,不能跨两个字节。请读者看下面的例子:
struct data
{
unsigned int a:2;
unsigned int b:4;
unsigned int c:3;
};
在这个例子中,域名a、b占用6个位,域名c占3个位,这样1个完整的字节就没法存储a、b和c,c就得跨两个字节,这是不允许的。当一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。可以使用下面的方式,来解决这个问题。
struct data
{
unsigned int a:2;
unsigned int b:4;
unsigned int : 0 // /*空域*/
unsigned int c:3;
};
这样修改后,a占第一个字节的2位,b占接下来的4位,剩余的2位用0填充,表示不用。c会从第二个字节开始存储。
第二、位域的占用的位数,不能超过8个二进制位
前面已经提到了,位域不允许跨字节,当然位域的长度不能大于一个字节的长度。
第三、允许位域无域名
前文已经提到了,为了使某个域名从新的一个字节开始,可以使用无名的域来填充,做一下调整。要注意的是,无名的位域是不能使用的。
从以上分析可以看出,位域在本质上就是一种结构类型,不过其成员是按二进位分配的。
总结:
bit fields初始化时注意: 其是对位进行操作的,赋值时应该当小于其最大值(如果大于,那它的值不会有规律的推出下个 bit 的值。如 .a =10, 则.b不能确定)
2:bit fields 结构体,内存分配给其的空间 不是 按 bit域的大小 来确定的。 还是按照 一般的结构体 那样 类型内存 对齐 分配。
相关文章推荐
- C/C++位域(Bit-fields)之我见
- 关于Bit Fields的两篇资料
- C语言中位域(bit fields)的可移植问题
- 位域(bit fields)简介
- AWK学习总结(三) Records and Fields
- Joy of Programming: Understanding Bit-fields in C
- C语言中位域(bit fields)的可移植问题
- c++ 位域(Bit Fields)
- 【转】C语言中结构体的位域(bit-fields)
- C Bit Fields——C Language Reference(from msdn)
- C++ Bit Fields
- C/C++位域(Bit-fields)
- C语言中位域(bit fields)的可移植问题
- 【转】C的另一重要数据结构bit-fields
- C Bit Fields——C Language Reference(from msdn)
- 【转】 C/C++位域(Bit-fields)之我见
- WINDOWS XP 64 BIT操作系统实践和总结
- C/C++位域(Bit-fields)操作的问题
- 位域(bit fields)简介
- 位域(bit fields)