^= (compound bitwise xor)

説明

^=(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;
タイトルとURLをコピーしました