我无法弄清楚以下代码段之间的区别是什么:
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)
注意括号。
如果不确定表达式的计算顺序,最好在括号中加上括号。