次のコードの違いが何であるかわかりません。
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) {...}
2 番目のオプションは true を返しませんが、最初のオプションは期待どおりに動作します。
誰にもアイデアはありますか?
2 番目の式が最初に評価され(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)
括弧に注意してください。式の評価順序がわからない場合は、括弧を追加することをお勧めします。