説明
^=(compound bitwise xor)は、変数と定数を使って変数の特定のビットをトグル(反転)させるために使います。
0 0 1 1 operand1 0 1 0 1 operand2 ---------- 0 1 1 0 (operand1 ^ operand2) - returned result
構文
x ^= y; // equivalent to x = x ^ y;
x | char、int、long |
y | char、int、long |
コード例
0と bitwise xor)されたビットは変更されずに残ります。
つまり、myByte がバイト変数の場合、次のようになります。
myByte ^ 0b00000000 = myByte;
1と「ビットごとにXOR」されたビットは、次のように切り替わります。
myByte ^ 0b11111111 = ~myByte;
注意
ビット演算子でビットを扱っているので – 定数でバイナリフォーマッタを使うのが便利です。
他の表現でも数値は同じ値になりますが、理解しづらいだけです。
また、わかりやすくするために0b00000000を表示していますが、どんな数値フォーマットでも0は0です。
その結果、変数のビット0と1を切り替え、変数の残りの部分は変更しない場合は、定数0b00000011と^=(compound bitwise xor)を使用します。
1 0 1 0 1 0 1 0 variable 0 0 0 0 0 0 1 1 mask ---------------------- 1 0 1 0 1 0 0 1 bits unchanged bits toggled
ここでは、同じ表現で、変数のビットを記号xに置き換えています。
x x x x x x x x variable 0 0 0 0 0 0 1 1 mask ---------------------- x x x x x x ~x ~x bits unchanged bits set
myByte = 0b10101010; myByte ^= 0b00000011 == 0b10101001;