10

谁能用一个很好的例子来解释这个运算符?

我知道这个运算符是什么。我的意思是一个现实生活中的例子。

4

6 回答 6

18

它是逻辑操作的实现exclusive disjunction

http://en.wikipedia.org/wiki/Exclusive_or

排他析取常用于按位运算。例子:

  • 1 异或 1 = 0
  • 1 异或 0 = 1
  • 0 异或 1 = 1
  • 0 异或 0 = 0
  • 1110 xor 1001 = 0111(这相当于没有进位的加法)

如上所述,由于异或与模 2 加法相同,因此两个 n 位字符串的按位异或与向量空间 (Z/2Z)^4 中的标准加法向量相同。

在计算机科学中,异或析取有多种用途:

  • 它告诉两个位是否不相等。
  • 它是一个可选的位翻转器(决定输入选择是否反转数据输入)。
  • 它告诉是否有奇数个 1 位(如果奇数个变量为真,则为真)。

(以及大量其他用途)

于 2011-06-21T08:24:46.133 回答
12

例如,像这样:

var result = a ^ b;

result          a        b
--------------------------------
true            true    false
true            false   true
false           true    true
false           false   false
于 2011-06-21T08:27:42.680 回答
6

要使“异或”计算为真,只有一个操作数必须为真。

foo ^ bar

相当于

(foo && !bar) || (!foo && bar)
于 2011-06-21T08:32:45.740 回答
2

使用 XOR 时,仅当比较语句中只有一个为真时,该语句才计算为真。所以:

bool foo = true;
bool bar = false;
if (foo ^ bar) { bar = true; // this evaluates to true }
if (foo ^ bar) { // This evaluates to false, since both statements are now true. }
于 2011-06-21T08:24:47.237 回答
1

编程语言的参考总是寻找运算符定义的最佳位置。

在这种情况下,MSDN 是最适合 C# 运算符的定义。

根据文档

二进制 ^ 运算符是为整数类型和 bool 预定义的。对于整数类型,^ 计算其操作数的按位异或。对于 bool 操作数,^ 计算其操作数的逻辑异或;也就是说,当且仅当其操作数之一为真时,结果才为真。

还列出了一个例子。

于 2011-06-21T08:27:29.547 回答
1

XOR 是一个常见的布尔运算符,在 C# 中没有任何独特之处。我建议阅读一些关于布尔代数的知识,以了解它在 1 位上的用途,然后检查当你对任意两个数字或字符 a 和 b 进行 (a XOR b) XOR b 时得到的结果。

于 2011-06-21T08:27:57.287 回答