我无法弄清楚以下代码之间的区别是什么:
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,而第一个选项的行为与预期一致。
有没有人有任何想法?
答案 0 :(得分:2)
第二个表达式首先计算结果始终为false的(1==0)
。然后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)
注意括号。 如果你不确定表达式的评估顺序,它是一个很好的编程实践来添加括号。