【问题标题】:Performing the inverse of (or reversing) bitwise OR in C#在 C# 中执行按位 OR 的逆运算(或反转)
【发布时间】:2012-10-03 03:04:31
【问题描述】:

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

场景:

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

示例: flags |= 0x200;

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

有没有办法做到这一点?

【问题讨论】:

    标签: c# .net operators bit-manipulation


    【解决方案1】:

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

    flags &= ~0x200;
    

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

    【讨论】:

      【解决方案2】:

      XOR 不起作用吗? flags ^ 0x200

      【讨论】:

      • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
      • 我不同意 - 我以一种礼貌的方式声明,可以使用 XOR 来撤消这样的按位运算,这就是我认为发帖者所要求的。
      • @RussellTroywest,您的回答很有帮助!谢谢! :-)
      【解决方案3】:

      你可以异或标志来移除它

      flags ^= 0x200
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-12-30
          • 2012-07-31
          • 1970-01-01
          • 1970-01-01
          • 2014-12-16
          • 1970-01-01
          • 1970-01-01
          • 2021-06-13
          相关资源
          最近更新 更多