【问题标题】:Is there a bitwise equivalent of boolA == boolB?是否有 boolA == boolB 的按位等价物?
【发布时间】:2021-01-29 14:03:58
【问题描述】:

我知道我可以使用 bool ^= true 来反转它的值,但是是否有类似的运算符可以在没有 == 运算符的情况下评估 boolA == boolB?我对bitwise不太了解,但我还没有在网上找到任何答案。

应该是这样的

bool a = false;
bool b = true;
bool c = a /*some sign, like ^ or ~ or something */ b;
Debug.Log(c);
// output: false

【问题讨论】:

  • 我相信你可以编造一些东西,但是在比较位域以及比较布尔值时你会使用==
  • @canton7 我认为他的意思是按位比较数字,如果两个当前位相等则置为 1
  • @CoderCharmander 我不想操作位,只有 C# 中的布尔值
  • @ThéoDriutti 你的意思是在没有== 运算符的情况下测试布尔相等性?
  • @CoderCharmander 的答案很好而且很标准。但是您必须知道它不是 CPU 优化的,因为单个测试 CMPJE 在 CPU 时钟方面是最快的。使用位运算符之后,除了使用 JMP 和 JE 之外,您还需要......这样的替换只在多重计算和复杂方程(如 3D)中有用,并且在那里,您将获得优化。

标签: c# bit-manipulation bitwise-operators


【解决方案1】:

您应该能够使用 XOR 运算符 (^)。如果输入位不同,XOR 会返回 1,因此可以按位计算!=。之后,您可以使用~ (NOT) 一元运算符反转位。你可以这样做:

~(0b1010 ^ 0b1100) // 0b1001

【讨论】:

  • 这和按位与 (&) 不一样吗? 0x0b101 & 0x0b110 == 0x0b100
  • @Icemanind 对于0 & 0,按位与返回 0,而不是 1,因为它应该测试按位相等性。
  • 啊,我明白了。你不只是比较哪些位都打开了。您正在查看哪些位是相等的。明白了!感谢您的澄清。
猜你喜欢
  • 2021-03-29
  • 2011-01-16
  • 2020-09-20
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多