首先定义一个C语言结构体AAA,注意其中resv保留字段占用了一个char型的3位:
typedef struct tagAAA {
int a;
int b;
char c:1, d:2, e:2, resv:3;
char flag;
} AAA;
#define WC 4
AAA *temp;
1.如果要判断保留位的值,比如resv字段,可以直接判断。
if (temp->resv == WC)
如果使用位运算的判断方式,如何编写呢?
1)如果要识别3位中的某一位是否等于WC,比如第一位是否置1,则可以这么写:
if ((temp->resv & 0x4) == WC) // 4的二进制是100,用于识别第一位
2)如果要识别3位中的所有位是否等于WC,则可以这么写:
if ((temp->resv & 0x7) == WC) // 7的二进制是111,此时resv需要是100才可能等于WC
2.那如何对其中某一位置1呢?
当前resv一共有3位二进制(000),比如想对首位的值置1(1XX),其他位保持不变:
temp->resv |= 4; // 4二进制位100,按位或可以达到目的
3.那如何对其中某一位置0呢?
当前resv一共有3位二进制(000),比如想对首位的值置0(0XX),其他位保持不变:
temp->resv &= (~4);// 100取反相当于是011,按位与可以达到目的
附:拓展知识(你知道4取反的结果是几么?)
yo peace!
网友评论