【tip】位运算小技巧

2023-11-07  本文已影响0人  papi_k的小茅屋

首先定义一个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!

上一篇 下一篇

猜你喜欢

热点阅读