1

私は 2 つの整数の個々のビットを操作しています (Ubuntu マシンでのコンパイルに g++ を使用しています)。

いくつかの中間ステップでは、ビット表現を次のようにしています

q = 11000000000000000000000000000000
q_1 = 00000000000000000000000000000001

ここで、ユニットの q と q_1 の位置が同じかどうかを確認したいと思います。(*q)&1==q_1そのため、 if条件をチェックしていますが、正常に機能しています。

しかし、ユニットの q の位が 0 で q_1 の位が 1 であることを確認したいときはいつでも、そうすべきだと思ったのです((*q)&1==0) && (q_1==1)が、期待どおりに動作しません。デバッグのために、 と の値を個別に編集したところ、 として出力されましcoutた。ただし、値が0 として出力されました。なぜですか?((*q)&1==0)(q_1==1)1((*q)&1==0) && (q_1==1)

* EDIT : *関数では、q は参照によって渡されたため、*q を使用して値を取得しています。

4

1 に答える 1

11

C および C++ では、ビットごとの&演算子は実際には等価演算子よりも優先順位が低くなり==ます。ビット演算子を括弧で囲む必要があります。

そう:

((*q)&1==0) && (q_1==1)

次のようにする必要があります。

(((*q)&1)==0) && (q_1==1)

参照: http://en.cppreference.com/w/cpp/language/operator_precedence

于 2013-02-01T11:40:27.617 に答える