Bitwise Functions

bit_count(x, bits) → bigint

Count the number of bits set in x (treated as bits-bit signed integer) in 2’s complement representation:

  1. SELECT bit_count(9, 64); -- 2
  2. SELECT bit_count(9, 8); -- 2
  3. SELECT bit_count(-7, 64); -- 62
  4. SELECT bit_count(-7, 8); -- 6

bitwise_and(x, y) → bigint

Returns the bitwise AND of x and y in 2’s complement representation.

bitwise_not(x) → bigint

Returns the bitwise NOT of x in 2’s complement representation.

bitwise_or(x, y) → bigint

Returns the bitwise OR of x and y in 2’s complement representation.

bitwise_xor(x, y) → bigint

Returns the bitwise XOR of x and y in 2’s complement representation.

bitwise_shift_left(x, shift, bits) → bigint

Left shift operation on x (treated as bits-bit integer) shifted by shift:

  1. SELECT bitwise_shift_left(7, 2, 4); -- 12
  2. SELECT bitwise_shift_left(7, 2, 64); -- 28

bitwise_logical_shift_right(x, shift, bits) → bigint

Logical right shift operation on x (treated as bits-bit integer) shifted by shift:

  1. SELECT bitwise_logical_shift_right(7, 2, 4); -- 1
  2. SELECT bitwise_logical_shift_right(-8, 2, 5); -- 6

bitwise_arithmetic_shift_right(x, shift) → bigint

Arithmetic right shift operation on x shifted by shift in 2’s complement representation:

  1. SELECT bitwise_arithmetic_shift_right(-8, 2); -- -2
  2. SELECT bitwise_arithmetic_shift_right(7, 2); -- 1

Generic Shift Functions

These three functions accept values of integral value types TINYINT, SMALLINT, INTEGER and BIGINT, and shift them by the amount given by shift, returning a value of the same integral type. For all three functions, the amount to shift is given by the bottom bits of the shift parameter, and higher bits of the shift parameter are ignored.

bitwise_left_shift(value, shift) → [same as value]

Returns the left shifted value of value:

  1. SELECT bitwise_left_shift(TINYINT '7', 2); -- 28
  2. SELECT bitwise_left_shift(TINYINT '-7', 2); -- -28

bitwise_right_shift(value, shift, digits) → [same as value]

Returns the logical right shifted value of value:

  1. SELECT bitwise_right_shift(TINYINT '7', 2); -- 1
  2. SELECT bitwise_right_shift(SMALLINT -8, 2); -- 16382

bitwise_right_shift_arithmetic(value, shift) → [same as value]

Returns the arithmetic right shifted value of value:

  1. SELECT bitwise_right_shift_arithmetic(BIGINT '-8', 2); -- -2
  2. SELECT bitwise_right_shift_arithmetic(SMALLINT '7', 2); -- 1

See also bitwise_and_agg() and bitwise_or_agg().