我来自游戏编程背景,刚刚遇到了按位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求值之前,两个参数都隐式转换为inttrue假定值为1,而false假定值为0

如果该结果不为零,则if主体运行,并且仅当body1awake不等于body2awake时才会发生。

所以也许等效

if (body1awake != body2awake)

本来会更好。如果作者认为自己的方法更快,那么他们就需要严肃地与编译器优化进行交流,并在对话中引入规则。

关于c++ - 了解 boolean 变量的按位XOR(^),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60117888/

10-11 18:10