前のステートメントが 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を生成します。