第十五章 位操作
位操作的各种用法
下面将根据具体应用中较为常见的情况来介绍位操作的一些常用知识.首先我们定义MASK =
2,即二进制00000010.
- 掩码 flags = flags & mask 查看flags中的第二位的值(掩码的意思就是因为其他为都
为0,都被掩盖了,只能查看第二位的值) - 查看一位的值if((flags & mask) == mask)
- 打开位 flags = flags | mask
- 关闭位 flags = flags & ~MASK
- 转置位 flags = flags ^ MASK (第二位如果关闭,则打开,如果打开,则关闭)
位字段
位字段由一个结构声明建立,该结构声明为每个字段提供标签,并决定该字段的看度
struct {
unsigned int autfd: 1;
unsigned int bldfc: 1;
unsigned int undln: 1;
unsigned int itals: 1;
}prnt;
上面例子中的定义中结构变量prnt包含4个1位的字段,因为每个字段只有一位,所以每个字段
只能被赋值0或1.同时我们假设prnt被存储在一个int大小的存储单元,则prnt中只有4位被使
用. 这里需要注意一点是位字段定义中不允许一个字段跨越两个unsigned int之前的边界,
若跨越,则编译器自动地移位到字段按照unsigned int边界对齐.