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

时间:2015-07-14 23:47:59

标签: language-agnostic bit-manipulation bitwise-operators boolean-logic bitmask

使用以下真值表的布尔运算序列是什么:

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

1 个答案:

答案 0 :(得分:1)

如果将灯关闭为0(X1 AND 10 = X0),并将灯与X切换为1(0X XOR 10 = 1X)?

编辑:最终答案

看起来输出1的唯一时间是掩码位为1且输入位为0,因此对于每个位,该函数类似于out = mask AND NOT in。