2 분 소요

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배 등 수치 축소

질문 정리

  1. 비트 연산자는 어떤 경우에 사용하나요?
    • 플래그 설정, 권한 관리, 설정 저장 등에서 사용됩니다.
  2. b’…‘로 표시한 이진수는 실제로 어떤 값인가요?
    • b'1001' → 2진수 1001 → 10진수 9로 처리됩니다.
  3. OR 연산으로 비트를 켜는 이유는?
    • OR는 1이 하나라도 있으면 1이 되므로 기존 값을 유지하면서 원하는 비트를 켤 수 있습니다.
  4. 특정 비트를 끄는 가장 안전한 방법은?
    • AND + NOT 조합을 사용하세요: 값 & ~마스크
  5. LEFT SHIFT는 곱하기와 같은 효과인가요?
    • 네, << 1은 2배, << 2는 4배 효과를 냅

카테고리:

업데이트:

댓글남기기