비트 함수
비트 함수 (Bitwise functions)
정수의 비트 단위 연산을 수행하는 함수들이에요. 2의 보수 표현에서 비트를 세거나, AND·OR·XOR, 시프트 연산을 할 때 써요.
출처: 문서
본문
bit_count(x, bits) → bigint
2의 보수 표현에서 x(bits-bit 부호 정수로 취급)에 설정된 비트 수를 세요.
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
2의 보수 표현에서 x와 y의 비트 AND를 반환해요.
19(이진수 10011)와 25(이진수 11001)의 비트 AND는 17(이진수 10001)이 돼요.
SELECT bitwise_and(19,25); -- 17
bitwise_not(x) → bigint
2의 보수 표현에서 x의 비트 NOT을 반환해요(NOT x = -x - 1).
SELECT bitwise_not(-12); -- 11
SELECT bitwise_not(19); -- -20
SELECT bitwise_not(25); -- -26
bitwise_or(x, y) → bigint
2의 보수 표현에서 x와 y의 비트 OR을 반환해요.
19(이진수 10011)와 25(이진수 11001)의 비트 OR은 27(이진수 11011)이 돼요.
SELECT bitwise_or(19,25); -- 27
bitwise_xor(x, y) → bigint
2의 보수 표현에서 x와 y의 비트 XOR을 반환해요.
19(이진수 10011)와 25(이진수 11001)의 비트 XOR은 10(이진수 01010)이 돼요.
SELECT bitwise_xor(19,25); -- 10
bitwise_left_shift(value, shift) → [same as value]
value를 왼쪽으로 시프트한 값을 반환해요.
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를 논리적으로 오른쪽으로 시프트한 값을 반환해요.
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를 산술적으로 오른쪽으로 시프트한 값을 반환해요.
64비트 미만으로 시프트하면 bitwise_right_shift()와 같은 값을 반환해요. 64비트 이상 시프트하면 양수 value는 0, 음수 value는 -1이 돼요.
SELECT bitwise_right_shift_arithmetic( 12, 64); -- 0
SELECT bitwise_right_shift_arithmetic(-45, 64); -- -1
bitwise_and_agg()와 bitwise_or_agg()도 참고하세요.
더 알아보기 (Learn more)
비트 집계 함수인 bitwise_and_agg()와 bitwise_or_agg()는 집계 함수 문서에서 볼 수 있어요.