我有一些标志,其中:
A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)
我想在我的标志中设置位 A 和 C:flag = A | C
现在我的标志是 5 (0101)。
我需要从标志中删除位 C。我怎样才能做到这一点?
我有一些标志,其中:
A = 1 (0001)
B = 2 (0010)
C = 4 (0100)
D = 8 (1000)
我想在我的标志中设置位 A 和 C:flag = A | C
现在我的标志是 5 (0101)。
我需要从标志中删除位 C。我怎样才能做到这一点?
要清除标志,您通常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) 检查,是否位设置
flag & C == C
2) 如果位设置应用 XOR 操作:
flag ^ C
现在我的标志是 5 (0001)。
可能有更简单的解决方案吗?