我有一个Arduino应用程序(实际上是一个库),其中有许多状态标志 - 最初我只是将它们声明为整数(实际上是uint8_t,因此在这种情况下是8位无符号字符)。但我可以将它们全部合并为一个整数,并使用位掩码操作来设置和测试状态。
以下是前者的示例:
if (_shift == HIGH)
{
_shift = LOW;
}
else
{
_shift = HIGH;
}
后者的一个例子
#define SHIFT_BIT 0
if (bitRead(_flags, SHIFT_BIT) == HIGH)
{
bitWrite(_flags, SHIFT_BIT, LOW);
}
else
{
bitWrite(_flags, SHIFT_BIT, HIGH);
}
前者阅读起来更好,但后者更高效(空间和时间)。在这种情况下,空间和时间效率总是应该获胜,还是只有在需要时才进行优化?
(添加)
为了完整起见,这里是关于bitWrite等宏的Wiring定义:
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))