[MySQL] 비트 연산과 관련 함수(CONV, BIN, BIT_LENGTH)
1. 비트 연산이란?
비트 단위에서 수행되는 연산이다. 즉, 2진수 형태인 비트 단위의 데이터에 대해서 연산을 수행한다. 비트 연산은 다른 연산에 비해 빠르고 메모리 사용이 적다. MySQL에서도 이러한 비트 연산을 사용할 수 있다. MySQL은 비트 연산을 지원하여 데이터베이스 내에서 효율적인 데이터 조작이 가능하다.
연산자 | 의미 | 설명 |
& | 비트 AND 연산 | 해당 비트가 모두 1이면 1, 아니면 0 |
| | 비트 OR 연산 | 해당 비트 중 하나만 1이어도 1, 아니면 0 |
^ | 비트 XOR 연산 | 해당 비트의 값이 다르면 1, 같으면 0 |
~ | 비트 NOT 연산 | 1은 0으로, 0은 1로 반전 |
<< | 왼쪽 Shift 연산 | 지정된 갯수만큼 모든 비트를 왼쪽으로 이동 |
>> | 오른쪽 Shift 연산 | 지정된 갯수만큼 모든 비트를 오른쪽으로 이동 |
2. MySQL Bit Functions and Operators
비트 연산
<예시>
DATA:
num |
8 |
15 |
1 |
13 |
SELECT num
, num & 8
, num & 4
, num & 2
, num & 1
OUTPUT:
num | num&8 | num&4 | num&2 | num&1 |
8 | 8 | 0 | 0 | 0 |
15 | 8 | 4 | 2 | 1 |
1 | 0 | 0 | 0 | 1 |
13 | 8 | 4 | 0 | 1 |
(1) num&8 연산과정
num | num의 이진수 | 8의 이진수 | & 연산 |
8 | 1000 | 1000 | 1000 ⇒ 8 |
15 | 1111 | 1000 | 1000 ⇒ 8 |
1 | 0001 | 1000 | 0000 ⇒ 0 |
13 | 1101 | 1000 | 1000 ⇒ 8 |
(2) num&4 연산과정
num | num의 이진수 | 4의 이진수 | & 연산 |
8 | 1000 | 0100 | 0000 ⇒ 0 |
15 | 1111 | 0100 | 0100 ⇒ 4 |
1 | 0001 | 0100 | 0000 ⇒ 0 |
13 | 1101 | 0100 | 0100 ⇒ 4 |
(3) num&2 연산과정
num | num의 이진수 | 2의 이진수 | & 연산 |
8 | 1000 | 0010 | 0000 ⇒ 0 |
15 | 1111 | 0010 | 0010 ⇒ 2 |
1 | 0001 | 0010 | 0000 ⇒ 0 |
13 | 1101 | 0010 | 0000 ⇒ 0 |
(4) num&1 연산과정
num | num의 이진수 | 1의 이진수 | & 연산 |
8 | 1000 | 0001 | 0000 ⇒ 0 |
15 | 1111 | 0001 | 0001 ⇒ 1 |
1 | 0001 | 0001 | 0001 ⇒ 1 |
13 | 1101 | 0001 | 0001 ⇒ 1 |
CONV( ) : 다른 숫자 시스템으로 변환해주는 함수
SELECT CONV(number, from_base, to_base)
-- Example
SELECT CONV(8, 10, 2) -- OUTPUT: '1000'
SELECT CONV(15, 10, 2) -- OUTPUT: '1111'
SELECT CONV(1, 10, 2) -- OUTPUT: '1'
SELECT CONV(13, 10, 2) -- OUTPUT: '1101'
- CONV() 함수는 숫자를 한 숫자 기본 시스템에서 다른 숫자 시스템으로 변환하고 결과를 문자열 값으로 반환한다.
BIN( ) : 숫자를 이진법으로 변환해주는 함수(string function)
SELECT BIN(8)
-- OUTPUT: '1000'
- BIN() 함수는 숫자의 이진 표현을 문자열 값으로 반환한다.
BIT_LENGTH( ) : 문자열을 비트 수로 표현하는 함수(string function)
SELECT BIT_LENGTH('text')
-- OUTPUT: 32
- BIT_LENGTH() 함수는 문자열의 길이를 비트 수로 표시하여 반환한다.
[참고 자료]
● 비트연산 설명
https://velog.io/@jdja2004/%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90-bitwise-operator
https://www.tcpschool.com/c/c_refer_bitCalculation
● MySQL Documentation > Bit Functions and Operators
https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html
● MySQL Documentation > Aggregate Functions
https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html
● MySQL Documentation > Mathematical Functions (CONV 함수)
https://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_conv
● MySQL Documentation > String Functions and Operators (BIN 함수, BIT_STRENGTH 함수)
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_bin