3

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

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,而第一个选项的行为符合预期。

有没有人有任何想法?

4

1 回答 1

2

第二个表达式首先计算(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)

注意括号。如果您不确定表达式的求值顺序,添加括号是一种很好的编程习惯。

于 2012-11-18T12:52:15.330 回答