비트 함수

비트 함수 (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의 보수 표현에서 xy의 비트 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의 보수 표현에서 xy의 비트 OR을 반환해요.

19(이진수 10011)와 25(이진수 11001)의 비트 OR은 27(이진수 11011)이 돼요.

SELECT bitwise_or(19,25); -- 27

bitwise_xor(x, y) → bigint

2의 보수 표현에서 xy의 비트 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

value0만큼 시프트하면 항상 원래 value가 돼요.

SELECT bitwise_left_shift(20, 0); -- 20
SELECT bitwise_left_shift(42, 0); -- 42

0shift만큼 시프트하면 항상 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

value0만큼 시프트하면 항상 원래 value가 돼요.

SELECT bitwise_right_shift(20, 0); -- 20
SELECT bitwise_right_shift(42, 0); -- 42

value64비트 이상 시프트하면 0이 돼요.

SELECT bitwise_right_shift( 12, 64); -- 0
SELECT bitwise_right_shift(-45, 64); -- 0

0shift만큼 시프트하면 항상 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비트 이상 시프트하면 양수 value0, 음수 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()집계 함수 문서에서 볼 수 있어요.