我无法弄清以下代码片段之间的区别: 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,而第一个选项则表现正常。有人有任何想法吗?
第二个表达式首先评估结果始终为false的(1==0)。然后与函数__double2int_rd的结果进行AND运算。因此,它实际上评估:if(__double2int_rd(pos.x/params.cellSize.x*2.0) & 0)这将始终为false。第一个表达式的等价物将是:if((__double2int_rd(pos.x/params.cellSize.x*2.0) & 1) == 0)请注意括号。如果您不确定表达式的评估顺序,添加括号是一个好的编程习惯。