如何在 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在这里。
如何将所有这些简化为一行?抱歉这个菜鸟问题 - 我是 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在这里。