Побитовые функции#
- bit_count(x, bits) bigint#
Подсчитывает количество битов, установленных в
x. Значениеxбудет рассмотрено какbits-битное целое число со знаком. Функция возвращает ошибку, если количествоbitsнедостаточно для представления значенияx:SELECT bit_count(9, 64); -- 2 SELECT bit_count(9, 8); -- 2 SELECT bit_count(9, 2); -- ERROR: Number must be representable with the bits specified SELECT bit_count(-1, 64); -- 64 SELECT bit_count(-1, 8); -- 8
- bitwise_and(x, y) bigint#
Возвращает побитовое AND для
xиy.Побитовое AND для
19(10011) и25(11001) приводит к17(10001):SELECT bitwise_and(19,25); -- 17
- bitwise_not(x) bigint#
Возвращает побитовое NOT для
x: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(10011) и25(11001) приводит к27(11011):SELECT bitwise_or(19,25); -- 27
- bitwise_xor(x, y) bigint#
Возвращает побитовое XOR для
xиy.Побитовое XOR для
19(10011) и25(11001) приводит к10(01010):SELECT bitwise_xor(19,25); -- 10
- bitwise_left_shift(value, shift) [same as value]#
Сдвигает значение
valueвлево на заданное количество битshift.Сдвиг
1(001) на два бита влево приводит к4(00100):SELECT bitwise_left_shift(1, 2); -- 4
Сдвиг
5(0101) на два бита влево приводит к20(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вправо на заданное количество битshift.Сдвиг
8(1000) на три бита вправо приводит к1(001):SELECT bitwise_right_shift(8, 3); -- 1
Сдвиг
9(1001) на один бит вправо приводит к4(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вправо на заданное количество битshift. Данная функция заполняет биты слева значением знакового бита (0 для неотрицательных значений и 1 для отрицательных). Таким образом, функцииbitwise_right_shiftиbitwise_right_shift_arithmeticвсегда возвращают одни и те же значения для неотрицательных чисел, но веду себя по-разному для отрицательных значений:SELECT bitwise_right_shift(9, 1); -- 4 SELECT bitwise_right_shift_arithmetic(9, 1); -- 4 SELECT bitwise_right_shift(cast(-9 as tinyint), 1); -- 123 (1111 0111 -> 0111 1011) SELECT bitwise_right_shift_arithmetic(cast(-9 as tinyint), 1); -- -5 (1111 0111 -> 1111 1011)
См. также bitwise_and_agg() и bitwise_or_agg().