bit fields 总结
来源:互联网 发布:以交易为生 知乎 编辑:程序博客网 时间:2024/06/05 04:55
位域的定义与结构体的定义相似,其一般形式如下:
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域的大小 来确定的。 还是按照 一般的结构体 那样 类型内存 对齐 分配。
- bit fields 总结
- C++ Bit Fields
- 位域(bit fields)
- C Bit Fields
- C++ Bit Fields
- C++ Bit Fields
- 关于位域bit fields
- c++ 位域(Bit Fields)
- c++ 位域(Bit Fields)
- 位域(Bit-fields)分析
- 位域(bit fields)简介
- 位域(bit fields)简介
- 位域(Bit-fields)分析
- 位域(bit fields)简介
- 关于Bit Fields的两篇资料
- Low Level Operators and Bit Fields
- Low Level Operators and Bit Fields
- C/C++ 位域(Bit Fields)
- DWR之入门实例(一)
- android log 控制
- 函数模板及其重载
- Yii数据库操作
- Ubuntu下非常给力的下载工具
- bit fields 总结
- 微信开发【基本接入】
- 计算两个时间段相差天数
- LDR指令详解(转载)
- 如何将eclipse下的引用的jar文件放在包内
- 时间操作(Java版)—获取给定时间与当前系统时间的差值(以毫秒为单位)
- 使用androidNDK编译ffmpeg2.2 学习笔记
- 谷歌想用Android统治全世界
- mac 完全卸载firefox