What is C# exclusive or `^` usage? [closed]

2020-07-08 06:30发布

问题:

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.

Can anyone explain this operator with a good example?

I know what this operator is. I mean a real-life example.

回答1:

It is an implementation of the the logical operation exclusive disjunction

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

Exclusive disjunction is often used for bitwise operations. Examples:

  • 1 xor 1 = 0
  • 1 xor 0 = 1
  • 0 xor 1 = 1
  • 0 xor 0 = 0
  • 1110 xor 1001 = 0111 (this is equivalent to addition without carry)

As noted above, since exclusive disjunction is identical to addition modulo 2, the bitwise exclusive disjunction of two n-bit strings is identical to the standard vector of addition in the vector space (Z/2Z)^4.

In computer science, exclusive disjunction has several uses:

  • It tells whether two bits are unequal.
  • It is an optional bit-flipper (the deciding input chooses whether to invert the data input).
  • It tells whether there is an odd number of 1 bits ( is true iff an odd number of the variables are true).

(and a whole ton of other uses)



回答2:

For example, like this:

var result = a ^ b;

result          a        b
--------------------------------
true            true    false
true            false   true
false           true    true
false           false   false


回答3:

For "exclusive or" to evaluate to true one and only one operand has to be true.

foo ^ bar

is equivalent to

(foo && !bar) || (!foo && bar)


回答4:

When using XOR, the statement only evaluates to true if only ONE of the compared statements is true. So:

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. }


回答5:

XOR is a common boolean operator and has nothing unique to it in C#. I suggest reading a little about boolean algebra to learn what it is used for with 1 bit, then check what you get when you do (a XOR b) XOR b with any two numbers or characters a and b.



回答6:

A programming language's reference is always the best place to look for the definitions of operators.

In this case, MSDN is the most appropriate definition for a C# operator.

According to the documentation:

Binary ^ operators are predefined for the integral types and bool. For integral types, ^ computes the bitwise exclusive-OR of its operands. For bool operands, ^ computes the logical exclusive-or of its operands; that is, the result is true if and only if exactly one of its operands is true.

An example is also listed.