BIT_XOR
Performs a bitwise XOR
operation on an integer expression, ignoring null input values. Bitwise XOR
, or exclusive OR
, compares two bits and returns 1
if they are different, and 0
if they are the same.
Numbers are represented in two’s complement, a binary method for signed integers as follows:
- Positive numbers are represented in standard binary form, while negative numbers are derived by inverting the bits of their positive counterpart and adding
1
. - A leftmost bit of
0
indicates a positive number, while1
indicates a negative number.
Syntax
BIT_XOR
([ DISTINCT ] <expression>)
Note: DISTINCT
has no effect on the function’s result.
Parameters
Parameter | Description | Supported input types |
---|---|---|
<expression> | The expression used to compute the result. | INT , BIGINT |
Return Types
The BIT_XOR
function returns a result of either type INT
or BIGINT
, depending on the type of the input.
Examples
Example
The following code example performs a bitwise XOR
operation across three rows in column a
that contain the values 1
, 2
, and 1
, respectively:
SELECT BIT_XOR(a)
FROM UNNEST([1,2,1]) as a;
Returns: The previous code example returns 2
. In a 4-bit system, the binary representation of 1
, and 2
are:
1
->
0001
2
->
0010
The bitwise XOR
of 0001
and 0010
from the first and second rows is 0011
, or 3
. The bitwise XOR
between this result and the 1
in the third row is 0010
, or 2
, because the XOR
of two identical numbers is 0
.
Example
The following code example uses DISTINCT
to eliminate duplicate values from column a
, and performs a bitwise XOR
operation across two rows that contain the values 1
and 2
:
SELECT BIT_XOR(DISTINCT a)
FROM UNNEST([1,2,1]) as a;
Returns: The previous code example returns 3
. In a 4-bit system, the binary representation of 1
and 2
are:
1
->
0001
2
->
0010
The bitwise XOR
of 0001
and 0010
is 0011
, or 3
.
Example
The following code example performs a bitwise XOR
operation across a series of integers ranging from 1
to 3
:
SELECT BIT_XOR(a)
FROM generate_series(1, 3) as a;
Returns: The previous code example returns 0
. In a 4-bit system, the binary representation of integers from 1
to 3
are:
1
->
0001
2
->
0010
3
->
0011
The bitwise XOR
of 0001
and 0010
is 0011
, which equals 3
. The bitwise XOR
between 0011
and itself is 0000
, or 0
.
Example
The following code example performs a bitwise XOR
operation across a series of integers ranging from -1
to 2
:
SELECT BIT_XOR(a)
FROM generate_series(-1, 2) as a;
Returns: The previous code example returns -4
. In a 4-bit system, the binary representation of integers from -1
to 1
are:
-1
->
1111
0
->
0000
1
->
0001
2
->
0010
The bitwise XOR
of 1111
and 0000
is 1111
, which equals -1
. The bitwise XOR
between 1111
and 0001
is 1110
, or -2
. The bitwise XOR
between 1110
and 0010
is 1100
, which equals -4
.