在C#中执行(或反转)按位OR的反转

时间:2012-10-12 10:03:37

标签: c# .net operators bit-manipulation

如何在C#中执行按位OR(|=)运算符的反转?我可以使用C#中的NOR按位运算符吗?

情境:

我从.NET框架继承了一个基类。该类具有设置标志的操作。

示例: flags |= 0x200;

在我的派生类中,我想省略此标志设置,就好像操作flags |= 0x200;从未发生过一样。

有没有办法实现这个目标?

4 个答案:

答案 0 :(得分:8)

您可以与要删除的值的反向(&)进行AND(~):

flags &= ~0x200;

如果您打算确保未设置此标志。如果您要撤消之前对此标志的更改,那么正如@Russell所说,XOR可能就是您所追求的。

答案 1 :(得分:5)

您可以对标志进行异或以删除它

flags ^= 0x200

如果该标志关闭,同样的操作也将打开该标志。与掩码的异或表现为切换。

答案 2 :(得分:1)

不是XOR工作吗? flags ^ 0x200

答案 3 :(得分:0)

您很难知道标志的原始值是否设置了这些位。当你的代码执行时,标志已经0x200,那么你的操作不会改变任何xor nor和nor,或者将确保检索先前的值。我看到的一种方法是在虚方法中进行此操作,并在派​​生类中覆盖它而不进行任何更改。另一种方法是将此魔术值设为属性,并将其在派生类构造函数中设置为0.这将阻止更改。