我该如何将所有内容简化为一行?
REG &= ~BITA;
REG &= ~BITB;
REG &= ~BITC;
REG &= ~BITD;
REG &= ~BITE;
REG &= ~BITA;
REG &= ~BITB;
REG &= ~BITC;
REG &= ~BITD;
REG &= ~BITE;
|
(按位或)运算符。REG &= ~(BITA | BITB | BITC | BITD | BITE);
@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)
想要了解更多布尔代数的知识(在这种情况下非常重要),请点击这里。
如果我找到更多好的参考资料,我会在这里链接它。
~((1<<7) | (1<<6))
更改为 0b0011_1111
,因此编译后操作 REG &= ~(BITA | ...)
将需要大约3个指令。 - sunriax通过位移也可以按位置清除位:
REG &= ~((1<<7) | (1<<6) | ...);
或者使用预定义的位位置:
#define BITA 7
#define BITB 6
REG &= ~((1<<BITA) | (1<<BITB) | ...);