私はビット演算子にかなり慣れていません。a
3つの変数とがb
ありc
、これらの値がバイナリであるとしましょう。
a = 0001
b = 0011
c = 1011
今、私はビット単位で実行したいと思いますそしてこのように:
a
AND b
AND c
--------
d = 0001
d &= a &= b &= c
(私が期待したように)動作しませんが、どうすればこれを行うことができますか?ありがとう
私はビット演算子にかなり慣れていません。a
3つの変数とがb
ありc
、これらの値がバイナリであるとしましょう。
a = 0001
b = 0011
c = 1011
今、私はビット単位で実行したいと思いますそしてこのように:
a
AND b
AND c
--------
d = 0001
d &= a &= b &= c
(私が期待したように)動作しませんが、どうすればこれを行うことができますか?ありがとう
これだけの何が問題なのですか。
d = a & b & c;
あなたが欲しい:
d = a & b & c;
&=
ビット単位のANDを意味し、割り当ても行います。
d
もともとあなたが言ったようにあなた0
の表現であると主張された場合、それは常に0と評価されます。なぜなら、何も&
0
がに等しいから0
です。
これはうまくいくはずです
int a = 1; // 0001
int b = 3; // 0011
int c = 11; // 1011
int d = 0;
d = a & b & c;
'd'をすべて1に初期化するのを忘れた可能性があり、デフォルトは0です。d= -1を割り当てるか、必要に応じてd = 0xffffffffを割り当てることで、すべてのビットを1に簡単に設定できます。 4ビットを使用すると、d=0xFで十分です。
そうは言っても、そのようなデイジーチェーン演算子は、他の人が示唆しているように、物事を分解するよりも読みにくい傾向があります。