Shortcuts for XOR and XNOR
The classical formula for XOR on two variables remains
result = a.b' + b.a'
(where . means logical AND and + means logical OR and ' means logical NOT).
On the possible set of values, the table becomes something like :
which boils down to the interpretation of ANY BUT NOT ALL. This holds true for any no of variables in question, i.e.,
a ^ b ^ c ^ d ^ e ^ ....... x ^ y ^ z = 0
(iff all a, b, c ... z == 0|1 together. And ^ denotes XOR operation.)
So when it comes to applying an XOR formula to 2 variables, say a & b and storing their result in a variable, say x.
The starting point would be
x = (a AND !b) OR (b AND !a).
While this is correct, problems may arise when a & b are themselves functions which return true/false. In this case, the functions a & b would be executed twice just to compute the value of x. In cases where this may not be desired, we could stick to the short hand equivalent for XOR.
x = (a != b)
Which says that the result will be 1(true) only when both the variables are not the same, as can be inferred from the truth table above.
It solves many problems:
- Reduces typing effort
- Doesn't evaluate functions twice
- Reduces complexity when a & b themselves become large expressions.
- Makes code easy to read and understand and maintain
result = (a XOR b)', where ' means logical complement.
result = (a.b' + b.a')' = (a'+b) . (b'+a) = a'b' + b.b' + b.a + a'.a = a.b + a'.b'
In plain words, we could simply derive that
a XNOR b = !(a XOR b) = !(a != b)a XNOR b = (a == b)
But for the curious reader, the truth table should be enough proof:
Taking the derived formula
result = a.b + a'.b'
Readers to this point can observe that the result is 1(true) only when (a == b).