我来自游戏编程背景,刚刚遇到了按位XOR ^。我已经看到了如何使用整数的示例,但是我对 bool(boolean) 值的结果感到有些困惑。我知道 bool(boolean) 值是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)
本来会更好。如果作者认为自己的方法更快,那么他们就需要严肃地与编译器优化进行交流,并在对话中引入规则。
关于c++ - 了解 boolean 变量的按位XOR(^),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60117888/