具有以下真值的布尔运算序列 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。
具有以下真值的布尔运算序列是什么 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。