The XOR operation (x ^ 0x1
) inverts bit 0. So the expression effectively means: if bit 0 of x is 0, or any other bit of x is 1, then the expression is true.
Conversely the expression is false if x == 1.
So the test is the same as:
if (x != 1)
and is therefore (arguably) unnecessarily obfuscated.
^
is the bitwise XOR operation0x1
is 1
in hex notationx ^ 0x1
will invert the last bit of x
(refer to the XOR truth table in the link above if that's not clear to you).So, the condition (0 != ( x ^ 0x1 ))
will be true if x
is greater than 1 or if the last bit of x
is 0. Which only leaves x==1 as a value at which the condition will be false. So it is equivalent to
if (x != 1)
P. S. Hell of a way to implement such a simple condition, I might add. Don't do that. And if you must write complicated code, leave a comment. I beg of you.
This may seem as oversimplified explanation, but if someone would like to go through it slowly it is below:
^
is a bitwise XOR operator in c, c++ and c#.
A bitwise XOR takes two bit patterns of equal length and performs the logical exclusive OR operation on each pair of corresponding bits.
Exclusive OR is a logical operation that outputs true whenever both inputs differ (one is true, the other is false).
The truth table of a xor b:
a b a xor b
----------------------------
1 1 0
1 0 1
0 1 1
0 0 0
So let's illustrate the 0 == ( x ^ 0x1 )
expression on binary level:
what? xxxxxxxx (8 bits)
xor 00000001 (hex 0x1 or 0x01, decimal 1)
gives 00000000
---------------------------
the only answer is 00000001
so:
0 == ( x ^ 0x1 ) => x == 1
0 != ( x ^ 0x1 ) => x != 1
It is exclusive OR (XOR) operator. To understand how it works you can run this simple code
std::cout << "0x0 ^ 0x0 = " << ( 0x0 ^ 0x0 ) << std::endl;
std::cout << "0x0 ^ 0x1 = " << ( 0x0 ^ 0x1 ) << std::endl;
std::cout << "0x1 ^ 0x0 = " << ( 0x1 ^ 0x0 ) << std::endl;
std::cout << "0x1 ^ 0x1 = " << ( 0x1 ^ 0x1 ) << std::endl;
The output will be
0x0 ^ 0x0 = 0
0x0 ^ 0x1 = 1
0x1 ^ 0x0 = 1
0x1 ^ 0x1 = 0
So this expression
0 != ( x ^ 0x1 )
will be equal true only when x != 0x1.
It does not change x itself. It only checks whether x is equal to 0 or 1. this rxpression could be changed to
if ( x != 0x1 )
It checks that x
is actually not 0x1
... xor
ing x
with 0x1
will result in 0 only if x
is 0x1
... this is an old trick mostly used in assembly language
The ^
operator is bitwise xor. And 0x1
is the number 1
, written as a hexadecimal constant.
So, x ^ 0x1
evaluates to a new value that is the same as x
, but with the least significant bit flipped.
The code does nothing more than compare x with 1, in a very convoluted and obscure fashion.
The xor (exclusive or) operator is most commonly used to invert one or more bits. The operation is to ask if excactly one of the bits are one, this leads to the following truth table (A and B are inputs, Y is output):
A B Y
0 0 0
0 1 1
1 0 1
1 1 0
Now the purpose of this code seems to be to check if excatly the last bit is 1, and the others are 0, this equals if ( x != 1 )
.
The reason for this obscure method might be that prior bit manipulation techniques have been used and perhaps is used other places in the program.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With