具有以下真值的布尔运算序列 table

Sequence of boolean operations with the following truth table

具有以下真值的布尔运算序列是什么 table:

mask | target | result
======================
  0  |   0    |   0
  0  |   1    |   0
  1  |   0    |   1
  1  |   1    |   0

简而言之,就是 "toggle when mask bit is true, clear when mask bit is false"。


现在一些上下文:

我正在使用 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(X1 AND 10 = X0)使灯熄灭,用 1(0X XOR 10 = 1X)对灯进行异或以切换怎么样?

编辑:最终答案

看起来只有掩码位为 1 且输入位为 0 时才输出 1,因此对于每个位,函数类似于 out = mask AND NOT in。