理解布尔变量的按位异或 (^)

Understanding bitwise XOR (^) with boolean variables

我有游戏编程背景,我刚刚遇到按位异或 ^。我看过它如何与整数一起使用的示例,但我对布尔值的结果有点困惑。我知道 bool 是 0 或 1,但在测试后我无法使用简单的运算符复制 ^ 结果。有人可以向我解释以下代码片段(特别是 ^)在做什么吗?非常感谢。

bool body1awake = rigidbody1.isAwake;
bool body2awake = rigidbody2.isAwake;
if (body1awake ^ body2awake)
{
    if (body1awake) rigidbody2.SetAwake();
    else rigidbody1.SetAwake();
}

由于 bool 是比 int 更窄的类型,因此在计算 XOR 之前,两个参数都隐式转换为 inttrue 假定值 1false 假定值 0

如果该结果不为零,则 if 主体运行,当且仅当 body1awake 不等于 body2awake.

时才会发生这种情况

所以也许是等价的

if (body1awake != body2awake)

会更好。如果作者认为他们的方法更快,那么他们需要与编译器优化和 as-if 规则进行严格对话。

当只设置其中一个时,两个位的异或为真。如果两者都已设置或未设置,则为 false。因为 bool 基本上代表一个位(0 或 1 是它唯一的值)

if (body1awake ^ body2awake)

表示条件在 body1awake != body2awake.

时为真