理解布尔变量的按位异或 (^)
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 之前,两个参数都隐式转换为 int
。 true
假定值 1
,false
假定值 0
。
如果该结果不为零,则 if
主体运行,当且仅当 body1awake
不等于 body2awake
.
时才会发生这种情况
所以也许是等价的
if (body1awake != body2awake)
会更好。如果作者认为他们的方法更快,那么他们需要与编译器优化和 as-if 规则进行严格对话。
当只设置其中一个时,两个位的异或为真。如果两者都已设置或未设置,则为 false。因为 bool
基本上代表一个位(0 或 1 是它唯一的值)
if (body1awake ^ body2awake)
表示条件在 body1awake != body2awake
.
时为真
我有游戏编程背景,我刚刚遇到按位异或 ^。我看过它如何与整数一起使用的示例,但我对布尔值的结果有点困惑。我知道 bool 是 0 或 1,但在测试后我无法使用简单的运算符复制 ^ 结果。有人可以向我解释以下代码片段(特别是 ^)在做什么吗?非常感谢。
bool body1awake = rigidbody1.isAwake;
bool body2awake = rigidbody2.isAwake;
if (body1awake ^ body2awake)
{
if (body1awake) rigidbody2.SetAwake();
else rigidbody1.SetAwake();
}
由于 bool
是比 int
更窄的类型,因此在计算 XOR 之前,两个参数都隐式转换为 int
。 true
假定值 1
,false
假定值 0
。
如果该结果不为零,则 if
主体运行,当且仅当 body1awake
不等于 body2awake
.
所以也许是等价的
if (body1awake != body2awake)
会更好。如果作者认为他们的方法更快,那么他们需要与编译器优化和 as-if 规则进行严格对话。
当只设置其中一个时,两个位的异或为真。如果两者都已设置或未设置,则为 false。因为 bool
基本上代表一个位(0 或 1 是它唯一的值)
if (body1awake ^ body2awake)
表示条件在 body1awake != body2awake
.