如何在 C 中一次清除多个位?

How to clear multiple bits at once in C?

如何将所有这些简化为一行?抱歉这个菜鸟问题 - 我是 C 的新手。

    REG &= ~BITA;
    REG &= ~BITB;
    REG &= ~BITC;
    REG &= ~BITD;
    REG &= ~BITE;

谢谢!

您可以使用 |(按位或)运算符。

REG &= ~(BITA | BITB | BITC | BITD | BITE);

也可以通过移位来按位置清除位:

REG &= ~((1<<7) | (1<<6) | ...);

或预定义位位置:

#define BITA 7
#define BITB 6

REG &= ~((1<<BITA) | (1<<BITB) | ...);

@MikeCAT 回答正确,这里是位 有一个简单的规则 A & B = ~A || ~B。所以你可以将你的问题扩展到:

REG &= ~BITA & ~BITB & ~BITC & ~BITD & ~BITE; // 10 operations

您可以将其减少到:

REG &= ~(BITA | BITB | BITC | BITD | BITE);  // 6 operation

通过这种方式,您可以分解公因数以减少运算次数。您可以将这种缩减视为数学:

A += B * -55 + C * -55 + D * -55
A += -55B - 55C - 55D
A += -55(B + C + D)

阅读更多关于布尔代数的知识(这在这种情况下非常重要click here

如果我找到更好的参考,我会link在这里。