Побитовые функции#
- bit_count(x, bits) bigint#
Подсчитывает количество установленных битов в
x(рассматривается как знаковое целое длинойbitsбит) в представлении с дополнением до двух: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#
Возвращает побитовое AND для
xиyв представлении с дополнением до двух.Побитовое AND
19(binary:10011) и25(binary:11001) дает17(binary:10001):SELECT bitwise_and(19,25); -- 17
- bitwise_not(x) bigint#
Возвращает побитовое NOT для
xв представлении с дополнением до двух (NOT x = -x - 1):SELECT bitwise_not(-12); -- 11 SELECT bitwise_not(19); -- -20 SELECT bitwise_not(25); -- -26
- bitwise_or(x, y) bigint#
Возвращает побитовое OR для
xиyв представлении с дополнением до двух.Побитовое OR
19(binary:10011) и25(binary:11001) дает27(binary:11011):SELECT bitwise_or(19,25); -- 27
- bitwise_xor(x, y) bigint#
Возвращает побитовое XOR для
xиyв представлении с дополнением до двух.Побитовое XOR
19(binary:10011) и25(binary:11001) дает10(binary:01010):SELECT bitwise_xor(19,25); -- 10
- bitwise_left_shift(value, shift) [same as value]#
Возвращает значение
value, сдвинутое влево.Сдвиг
1(binary:001) на два бита дает4(binary:00100):SELECT bitwise_left_shift(1, 2); -- 4
Сдвиг
5(binary:0101) на два бита дает20(binary:010100):SELECT bitwise_left_shift(5, 2); -- 20
Сдвиг
valueна0всегда дает исходноеvalue:SELECT bitwise_left_shift(20, 0); -- 20 SELECT bitwise_left_shift(42, 0); -- 42
Сдвиг
0на любойshiftвсегда дает0:SELECT bitwise_left_shift(0, 1); -- 0 SELECT bitwise_left_shift(0, 2); -- 0
- bitwise_right_shift(value, shift) [same as value]#
Возвращает значение
value, логически сдвинутое вправо.Сдвиг
8(binary:1000) на три бита дает1(binary:001):SELECT bitwise_right_shift(8, 3); -- 1
Сдвиг
9(binary:1001) на один бит дает4(binary:100):SELECT bitwise_right_shift(9, 1); -- 4
Сдвиг
valueна0всегда дает исходноеvalue:SELECT bitwise_right_shift(20, 0); -- 20 SELECT bitwise_right_shift(42, 0); -- 42
Сдвиг
valueна64и более бит дает0:SELECT bitwise_right_shift( 12, 64); -- 0 SELECT bitwise_right_shift(-45, 64); -- 0
Сдвиг
0на любойshiftвсегда дает0:SELECT bitwise_right_shift(0, 1); -- 0 SELECT bitwise_right_shift(0, 2); -- 0
- bitwise_right_shift_arithmetic(value, shift) [same as value]#
Возвращает значение
value, арифметически сдвинутое вправо.Возвращает те же значения, что и
bitwise_right_shift(), при сдвиге менее чем на64бита. Сдвиг на64и более бит дает0для положительного и-1для отрицательногоvalue:SELECT bitwise_right_shift_arithmetic( 12, 64); -- 0 SELECT bitwise_right_shift_arithmetic(-45, 64); -- -1
См. также bitwise_and_agg() и bitwise_or_agg().