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) {...}

2 番目のオプションは true を返しませんが、最初のオプションは期待どおりに動作します。

誰にもアイデアはありますか?

4

1 に答える 1

2

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)

括弧に注意してください。式の評価順序がわからない場合は、括弧を追加することをお勧めします。

于 2012-11-18T12:52:15.330 に答える