Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我无法弄清楚以下代码之间的区别是什么:
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)其结果始终为假。然后ANDs它与函数的结果__double2int_rd。
(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)
注意括号。如果您不确定表达式的求值顺序,添加括号是一种很好的编程习惯。