从数字中删除位

时间:2013-03-13 14:02:00

标签: math boolean-logic

我有一点标志,其中:

A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)

我想在我的旗帜中设置A和C位:flag = A | ç

现在我的旗帜是5(0101)。

我需要从flag中删除C位。我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

要清除标记,通常AND使用补充,例如用C及相关语言:

x = 5;           // x = 0101
x = x & ~C;      // x = x & 1011 = 0101 & 1011 = 0001

注意:这可以稍微简洁地表达为:

x &= ~C;

或者,如果您已经知道特定位为1并且您想将其设置为0,则可以使用XOR切换(反转)它:

x = x ^ C;       // x = x ^ 0100 = 0101 ^ 0100 = 0001

或:

x ^= C;

答案 1 :(得分:0)

我的解决方案是:

1)检查,是否设置位

flag & C == C

2)如果位设置应用XOR操作:

flag ^ C

现在我的旗帜是5(0001)。

可能有更简单的解决方案吗?