説明
複合ビット演算子「&=」は、変数と定数を使って、変数の特定のビットを強制的にLOW状態(0)にするためによく使われます。これをプログラミングガイドでは、ビットの「クリア」や「リセット」と呼ぶことがあります。
Bitwise AND & 演算子のおさらいです。
0 0 1 1 operand1 0 1 0 1 operand2 ---------- 0 0 0 1 (operand1 & operand2) - returned result
構文
&= y; // equivalent to x = x & y;
x | char、int、long |
y | char、int、long |
コード例
MyByteがバイト変数の場合、0と「ビットごとのAND」されたビットは0にクリアされます。
myByte & 0b00000000 = 0;
注意点
ビット演算子でビットを扱っているので – 定数でバイナリフォーマッタを使うのが便利です。他の表現でも数値は同じ値になりますが、理解しづらいだけです。また、わかりやすくするために0b00000000を表示していますが、どんな数値フォーマットでもゼロはゼロです(うーん、何か哲学的なものを感じますね)。
結果として、変数のビット0と1をクリア(ゼロにする)し、変数の残りの部分を変更しないでおくには、定数0b11111100と複合ビット演算子(&=)を使用します。
1 0 1 0 1 0 1 0 variable 1 1 1 1 1 1 0 0 mask ---------------------- 1 0 1 0 1 0 0 0 bits unchanged bits cleared
同じ表現で、変数のビットを記号xに置き換えたものは以下の通りです。
x x x x x x x x variable 1 1 1 1 1 1 0 0 mask ---------------------- x x x x x x 0 0 bits unchanged bits cleared
myByte = 0b10101010; myByte &= 0b11111100; // results in 0b10101000