为什么“x ^= true”在这个例子中产生 false 吗?
为什么当前面的语句产生 true 时,语句 z ^= true 产生 false ?
bool v = true;
bool z = false;
z ^= v;
Console.WriteLine(z);
z ^= true;
Console.WriteLine(z);
OUTPUT
======
True
False
Why does the statement z ^= true produce a false when the previous produces a true ?
bool v = true;
bool z = false;
z ^= v;
Console.WriteLine(z);
z ^= true;
Console.WriteLine(z);
OUTPUT
======
True
False
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
因为它改变了第一个语句中
z
的值。Because it changes the value of
z
in the first statement.因为:
参见http://en.wikipedia.org/wiki/Xor
Because:
See http://en.wikipedia.org/wiki/Xor
^ 表示 XOR,如果一侧但不是两侧都为真,则 XOR 被定义为 true,而在其他情况下定义为 false。
所以
z ^= v 表示 z = false ^ true,表示 true
z ^= true 表示 z = true ^ true,表示 false
请注意,^= 更改了第一条和第二条语句中变量的值
^ Means XOR, XOR is defined as true if one but not both sides are true, and is defined as false in every other case.
So
z ^= v means z = false ^ true, which means true
z ^= true means z = true ^ true, which is false
Note that ^= changes the value of the variable in the first and second statement
XOR
(^
) 的真值表为运算
lhs ^= rhs
基本上只是lhs = lhs 的简写^rhs
。因此,在您的第一个^=
应用程序中,您更改了z
的值,这(根据^
的定义)改变了结果第二个应用程序。The truth table for
XOR
(^
) isThe operation
lhs ^= rhs
is basically just a short-hand forlhs = lhs ^ rhs
. So, in your first application of^=
you alter the value ofz
, which (in accordance with the definition of^
) changes the outcome of the second application.false XOR true = true,则将 z 设置为 true;
true XOR true = false,然后将 z 设置为 false。
false XOR true = true, then you set z to true;
true XOR true = false, then you set z to false.
x ^= y
形式的表达式计算为x = x ^ y
x ^ y
(XOR) 的结果是true
当且仅当恰好有一个其操作数为true。结论:当x == true时,x ^= true将产生true。
An expression of the form
x ^= y
is evaluated asx = x ^ y
The result of
x ^ y
(XOR) istrue
if and only if exactly one of its operands is true.conclusion: x ^= true will produce true when x == true.