SQL 비트 연산자 가이드: AND, OR, XOR, NOT, SHIFT 사용법과 예제
SQL에서는 비트 연산자(Bitwise Operators)를 통해 숫자 값을 비트 단위로 조작할 수 있습니다. 비트 연산은 특히 플래그 처리, 권한 관리, 설정값 제어 등에 유용하며, MySQL에서는 b’이진값’ 형식으로 이진수를 사용할 수 있습니다.
1. 비트 연산자 종류 및 기능 요약
| 연산자 | 설명 | 예제 | 결과 |
| —— | ————————– | ————————– | ——— |
| & | AND: 둘 다 1이면 1 | b'1001' & b'1100' | b'1000' |
| ` | ` | OR: 둘 중 하나라도 1이면 1 | b'1001' |
| ^ | XOR: 다를 때만 1 | b’1001’ ^ b’1100’ | b’0101’ |
| ~ | NOT: 비트 반전 | ~b’1010’ | b’0101’ |
| « | 왼쪽 시프트 (2배씩 증가) | b’0001’ « 2 | b’0100’ |
| » | 오른쪽 시프트 (2배씩 감소) | b’1100’ » 1 | b’0110’` |
2. 기본 연산 예제
2.1. AND 연산: &
SELECT b'1001' & b'1100' AS Result; -- 결과: b'1000'
- 1 AND 1 → 1, 나머지는 0
- 비트 마스크 검사에 사용
2.2. OR 연산: |
SELECT b'1001' | b'1100' AS Result; -- 결과: b'1101'
- 1 OR 0 → 1
- 비트 설정(켜기)에 사용
2.3. XOR 연산: ^
SELECT b'1001' ^ b'1100' AS Result; -- 결과: b'0101'
- 서로 다르면 1
- 특정 비트 토글에 사용
2.4. NOT 연산: ~
SELECT ~b'1010' AS Result; -- 결과: b'0101'
- 모든 비트를 반전시킴
2.5. Shift 연산
SELECT b'0001' << 2 AS LeftShift; -- 결과: b'0100'
SELECT b'1100' >> 1 AS RightShift; -- 결과: b'0110'
- 왼쪽 이동은 값을 2의 거듭제곱으로 곱함
- 오른쪽 이동은 값을 2로 나눔
3. 복합 연산 예제
3.1. 단계적 연산
SELECT (b'1010' & b'1100') | b'0011' AS Result;
b'1010' & b'1100'→b'1000'b'1000' | b'0011'→b'1011'
3.2. Shift 함께 사용
SELECT b'1100' >> 2 AS RightShift, b'1100' << 1 AS LeftShift;
-- 결과: RightShift = b'0011', LeftShift = b'1000'
4. 비트 연산 활용법
4.1. 특정 비트 확인
SELECT b'1010' & b'0010' AS IsBitSet; -- 결과: b'0010' → 2 (참)
- 비트 마스크를 사용해 해당 비트가 켜져 있는지 검사
4.2. 비트 켜기 (설정)
SELECT b'1000' | b'0100' AS SetBit; -- 결과: b'1100'
- OR 연산으로 특정 비트를 켜기(1로 설정)
4.3. 비트 끄기 (해제)
SELECT b'1100' & ~b'0100' AS ClearBit; -- 결과: b'1000'
- 특정 비트를 끄기(0으로 설정)
4.4. 비트 반전 (토글)
SELECT b'1100' ^ b'0100' AS ToggleBit; -- 결과: b'1000'
- XOR 연산을 통해 해당 비트를 반전(0→1, 1→0)
5. MySQL에서 이진수 쓰는 방법
b'0101'형식으로 표현하며, 내부적으로 정수로 처리됨- 예:
b'1010'= 10,b'0100'= 4
SELECT b'0101'; -- 결과: 5
6. 요약 정리표
| 연산자 | 설명 | 활용 예 |
|---|---|---|
& |
AND | 특정 비트가 켜져 있는지 확인 |
| ` | ` | OR |
^ |
XOR | 비트 토글 (켜진 비트만 끄기 등) |
~ |
NOT | 모든 비트를 반전 |
<< |
Left Shift | 2배, 4배 등 수치 증폭 |
>> |
Right Shift | 1/2배, 1/4배 등 수치 축소 |
질문 정리
- 비트 연산자는 어떤 경우에 사용하나요?
- 플래그 설정, 권한 관리, 설정 저장 등에서 사용됩니다.
- b’…‘로 표시한 이진수는 실제로 어떤 값인가요?
b'1001'→ 2진수 1001 → 10진수 9로 처리됩니다.
- OR 연산으로 비트를 켜는 이유는?
- OR는 1이 하나라도 있으면 1이 되므로 기존 값을 유지하면서 원하는 비트를 켤 수 있습니다.
- 특정 비트를 끄는 가장 안전한 방법은?
AND + NOT조합을 사용하세요:값 & ~마스크
- LEFT SHIFT는 곱하기와 같은 효과인가요?
- 네,
<< 1은 2배,<< 2는 4배 효과를 냅
- 네,
댓글남기기