前のステートメントが true を生成するときに、ステートメント z ^= true が false を生成するのはなぜですか?
bool v = true;
bool z = false;
z ^= v;
Console.WriteLine(z);
z ^= true;
Console.WriteLine(z);
OUTPUT
======
True
False
z
最初のステートメントの値を変更するためです。
^ XOR を意味します。XOR は、両方ではなく一方が真の場合に真と定義され、それ以外の場合は偽と定義されます。
そう
z ^= v は z = false ^ true を意味し、これは true を意味します
z ^= true は、z = true ^ true を意味し、これは false です
^= は、最初と 2 番目のステートメントで変数の値を変更することに注意してください。
XOR
( ^
)の真理値表は
a b a^b
0 0 0
0 1 1
1 0 1
1 1 0
操作lhs ^= rhs
は基本的に の省略形ですlhs = lhs ^ rhs
。したがって、最初のアプリケーションで^=
の値を変更するとz
、( の定義に従って^
) 2 番目のアプリケーションの結果が変わります。
false XOR true = true の場合、z を true に設定します。true XOR true = false の場合、z を false に設定します。
フォームの式は次のようx ^= y
に評価されます。x = x ^ y
x ^ y
(XOR)の結果は、そのオペランドの1 つだけがtruetrue
である場合に限ります。
結論: x ^= trueは、 x == trueの場合にtrueを生成します。