비트 함수와 연산자

비트 연산자

비트 연산자(Bitwise operator)는 비트 단위로 연산을 수행하며 산술 연산식에서 이용될 수 있다. 피연산자로 정수 타입이 지정되며, BIT 타입은 지정될 수 없다. 연산 결과로 BIGINT 타입 정수(64비트 정수)를 반환한다. 이때, 하나 이상의 피연산자가 NULL 이면 NULL 을 반환한다.

아래는 CUBRID가 지원하는 비트 연산자의 종류에 관한 표이다.

CUBRID가 지원하는 비트 연산자

비트 연산자 설명 조건식 리턴 값
& 비트 단위로 AND 연산을 수행하고, BIGINT 정수를 반환한다. 17 & 3 1
| 비트 단위로 OR 연산을 수행하고, BIGINT 정수를 반환한다. 17 | 3 19
^ 비트 단위로 XOR 연산을 수행하고, BIGINT 정수를 반환한다. 17 ^ 3 18
~ 단항 연산자이며, 피연산자의 비트를 역으로 전환(INVERT) 하는 보수 연산을 수행하고, BIGINT 정수를 반환한다. ~17 -18
<< 왼쪽 피연산자의 비트를 오른쪽 피연산자만큼 왼쪽으로 이동시키는 연산을 수행하고, BIGINT 정수를 반환한다. 17 << 3 136
>> 왼쪽 피연산자의 비트를 오른쪽 피연산자만큼 오른쪽으로 이동시키는 연산을 수행하고, BIGINT 정수를 반환한다. 17 >> 3 2

BIT_AND

BIT_AND(expr)

집계 함수로서, expr 의 모든 비트에 대해 비트 단위 AND 연산을 수행한다. 조건절을 만족하는 행이 없는 경우, NULL 을 반환한다.

Parameters:expr -- 정수 타입의 임의의 연산식이다.
Return type:BIGINT
CREATE TABLE bit_tbl(id int);
INSERT INTO bit_tbl VALUES (1), (2), (3), (4), (5);
SELECT 1&3&5, BIT_AND(id) FROM bit_tbl WHERE id in(1,3,5);
     1&3&5           bit_and(id)
============================================
         1                     1

BIT_OR

BIT_OR(expr)

집계 함수로서, expr 의 모든 비트에 대해 비트 단위 OR 연산을 수행한다. 조건절을 만족하는 행이 없는 경우, NULL 을 반환한다.

Parameters:expr -- 정수 타입의 임의의 연산식이다.
Return type:BIGINT
SELECT 1|3|5, BIT_OR(id) FROM bit_tbl WHERE id in(1,3,5);
     1|3|5            bit_or(id)
============================================
          7                     7

BIT_XOR

BIT_XOR(expr)

집계 함수로서, expr 의 모든 비트에 대해 비트 단위 XOR 연산을 수행한다. 조건절을 만족하는 행이 없는 경우, NULL 을 반환한다.

Parameters:expr -- 정수 타입의 임의의 연산식이다.
Return type:BIGINT
SELECT 1^2^3, BIT_XOR(id) FROM bit_tbl WHERE id in(1,3,5);
     1^3^5            bit_xor(id)
============================================
          7                     7

BIT_COUNT

BIT_COUNT(expr)

expr 의 모든 비트 중 1로 설정된 비트의 개수를 반환하는 함수이며, 집계 함수는 아니다.

Parameters:expr -- 정수 타입의 임의의 연산식이다.
Return type:BIGINT
SELECT BIT_COUNT(id) FROM bit_tbl WHERE id in(1,3,5);
   bit_count(id)
================
       1
       2
       2