7

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

设想:

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

例子: flags |= 0x200;

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

有没有办法做到这一点?

4

4 回答 4

9

您可以 AND ( ) 与要删除的值&的倒数 ( ):~

flags &= ~0x200;

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

于 2012-10-12T10:05:51.640 回答
6

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

flags ^= 0x200

如果它关闭,同样的操作也会打开该标志。与掩码进行异或运算的行为类似于切换。

于 2012-10-12T10:07:29.230 回答
2

异或不会工作吗?flags ^ 0x200

于 2012-10-12T10:06:33.163 回答
0

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

于 2012-10-12T10:12:35.290 回答