Bitwise functions#
- bit_count(x, bits) bigint#
Count the number of bits set in
x(treated asbits-bit signed integer) in 2’s complement representation:SELECT bit_count(9, 64); -- 2 SELECT bit_count(9, 8); -- 2 SELECT bit_count(-7, 64); -- 62 SELECT bit_count(-7, 8); -- 6
- bitwise_and(x, y) bigint#
Returns the bitwise AND of
xandyin 2’s complement representation.Bitwise AND of
19(binary:10011) and25(binary:11001) results in17(binary:10001):SELECT bitwise_and(19,25); -- 17
- bitwise_not(x) bigint#
Returns the bitwise NOT of
xin 2’s complement representation (NOT x = -x - 1):SELECT bitwise_not(-12); -- 11 SELECT bitwise_not(19); -- -20 SELECT bitwise_not(25); -- -26
- bitwise_or(x, y) bigint#
Returns the bitwise OR of
xandyin 2’s complement representation.Bitwise OR of
19(binary:10011) and25(binary:11001) results in27(binary:11011):SELECT bitwise_or(19,25); -- 27
- bitwise_xor(x, y) bigint#
Returns the bitwise XOR of
xandyin 2’s complement representation.Bitwise XOR of
19(binary:10011) and25(binary:11001) results in10(binary:01010):SELECT bitwise_xor(19,25); -- 10
- bitwise_left_shift(value, shift) [same as value]#
Returns the left shifted value of
value.Shifting
1(binary:001) by two bits results in4(binary:00100):SELECT bitwise_left_shift(1, 2); -- 4
Shifting
5(binary:0101) by two bits results in20(binary:010100):SELECT bitwise_left_shift(5, 2); -- 20
Shifting a
valueby0always results in the originalvalue:SELECT bitwise_left_shift(20, 0); -- 20 SELECT bitwise_left_shift(42, 0); -- 42
Shifting
0by ashiftalways results in0:SELECT bitwise_left_shift(0, 1); -- 0 SELECT bitwise_left_shift(0, 2); -- 0
- bitwise_right_shift(value, shift) [same as value]#
Returns the logical right shifted value of
value.Shifting
8(binary:1000) by three bits results in1(binary:001):SELECT bitwise_right_shift(8, 3); -- 1
Shifting
9(binary:1001) by one bit results in4(binary:100):SELECT bitwise_right_shift(9, 1); -- 4
Shifting a
valueby0always results in the originalvalue:SELECT bitwise_right_shift(20, 0); -- 20 SELECT bitwise_right_shift(42, 0); -- 42
Shifting a
valueby64or more bits results in0:SELECT bitwise_right_shift( 12, 64); -- 0 SELECT bitwise_right_shift(-45, 64); -- 0
Shifting
0by ashiftalways results in0:SELECT bitwise_right_shift(0, 1); -- 0 SELECT bitwise_right_shift(0, 2); -- 0
- bitwise_right_shift_arithmetic(value, shift) [same as value]#
Returns the arithmetic right shifted value of
value.Returns the same values as
bitwise_right_shift()when shifting by less than64bits. Shifting by64or more bits results in0for a positive and-1for a negativevalue:SELECT bitwise_right_shift_arithmetic( 12, 64); -- 0 SELECT bitwise_right_shift_arithmetic(-45, 64); -- -1
See also bitwise_and_agg() and bitwise_or_agg().