为什么“x ^ = true”在这个例子中产生错误?

时间:2010-01-05 22:44:37

标签: c# operators logic xor

为什么语句z ^ = true会在前一个产生真值时产生错误?

bool v = true;
bool z = false;

z ^= v;
Console.WriteLine(z);

z ^= true;
Console.WriteLine(z);

OUTPUT
======
True
False

6 个答案:

答案 0 :(得分:20)

因为它会在第一个语句中更改z的值。

答案 1 :(得分:15)

由于:

false ^ true == true
true ^ true == false

请参阅http://en.wikipedia.org/wiki/Xor

答案 2 :(得分:7)

^表示XOR,如果一个但不是两个边都为真,则XOR定义为真,并且在其他所有情况下定义为假。

所以

z ^ = v表示z = false ^ true,表示为真

z ^ = true表示z = true ^ true,为false

请注意,^ =会更改第一个和第二个语句中变量的值

答案 3 :(得分:2)

XOR^)的真值表是

a    b    a^b
0    0     0
0    1     1
1    0     1
1    1     0

操作lhs ^= rhs基本上只是lhs = lhs ^ rhs的简写。因此,在^=的第一次应用中,您更改z的值,(根据^的定义)更改第二个应用程序的结果。

答案 4 :(得分:1)

false XOR true = true,然后将z设置为true; true XOR true = false,然后将z设置为false。

答案 5 :(得分:1)

x ^= y形式的表达式评估为x = x ^ y

x ^ y(XOR)的结果为true当且仅当其中 强>

结论:当 x == true 时, x ^ = true 将产生 true