使用以下真值表的布尔运算序列是什么:
mask | target | result
======================
0 | 0 | 0
0 | 1 | 0
1 | 0 | 1
1 | 1 | 0
简而言之,那就是“当掩码位为真时切换,当掩码位为假时清除”。
现在有些背景:
我正在用Arduino设计一个转向信号,我只用两位掩码设置当前闪烁的灯光:
typedef enum ACTIVE_LIGHTS {
NONE = 0, // 00
RIGHT_LIGHT = 1, // 01
LEFT_LIGHT = 2, // 10
BOTH = 3 // 11
};
现在有一个要求是这样的:当我运行时,比方说,toggleLeft()
方法,我想清除正确的位,然后切换左边的位。
我尝试了两种方式,但没有按预期工作(蒙版始终是RIGHT_LIGHT或LEFT_LIGHT):
target ^= mask; //this toggles one side but doesn't turn the other off
target = mask; //this turns other side off, but never turns off same side
答案 0 :(得分:1)
如果将灯关闭为0(X1 AND 10 = X0),并将灯与X切换为1(0X XOR 10 = 1X)?
编辑:最终答案
看起来输出1的唯一时间是掩码位为1且输入位为0,因此对于每个位,该函数类似于out = mask AND NOT in。