为什么语句z ^ = true会在前一个产生真值时产生错误?
bool v = true;
bool z = false;
z ^= v;
Console.WriteLine(z);
z ^= true;
Console.WriteLine(z);
OUTPUT
======
True
False
答案 0 :(得分:20)
因为它会在第一个语句中更改z
的值。
答案 1 :(得分:15)
答案 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 。