我无法弄清楚以下代码段之间的区别是什么:

int t = __double2int_rd(pos.x/params.cellSize.x*2.0)&1;
if( t ==0) {...}


if(__double2int_rd(pos.x/params.cellSize.x*2.0)&1 == 0) {...}

第二个选项永远不会返回true,而第一个选项的行为将符合预期。

有人有什么想法吗?

最佳答案

第二个表达式首先计算(1==0),其结果始终为false。然后使用函数ANDs的结果对其进行__double2int_rd

因此,它实际上评估:
if(__double2int_rd(pos.x/params.cellSize.x*2.0) & 0)
这永远是错误的。

第一个表达式的等效项是:
if((__double2int_rd(pos.x/params.cellSize.x*2.0) & 1) == 0)
注意括号。
如果不确定表达式的计算顺序,最好在括号中加上括号。

09-06 11:12