[MariaDB] 비트 함수 및 연산자

2024. 8. 27. 15:28·Development/MySql

MariaDB에서 비트 연산자는 비트 수준에서 데이터를 조작하는 데 사용됩니다. 이는 비트 단위로 데이터를 처리할 수 있는 강력한 도구이며, 주로 플래그를 관리하거나 특정 비트 패턴을 검사하는 데 유용합니다. 아래는 MariaDB에서 지원하는 주요 비트 연산자들과 그 동작에 대한 설명입니다.

1. AND 연산자 (&)

  • 두 피연산자 간의 비트 단위 AND 연산을 수행합니다.
  • 두 비트가 모두 1인 경우에만 결과가 1이 됩니다.
  • SELECT 6 & 3; -- 결과: 2 (6 = 110, 3 = 011, AND 연산 결과: 010 = 2)

2. OR 연산자 (|)

  • 두 피연산자 간의 비트 단위 OR 연산을 수행합니다.
  • 두 비트 중 하나라도 1인 경우 결과가 1이 됩니다.
  • SELECT 6 | 3; -- 결과: 7 (6 = 110, 3 = 011, OR 연산 결과: 111 = 7)

3. XOR 연산자 (^)

  • 두 피연산자 간의 비트 단위 XOR 연산을 수행합니다.
  • 두 비트가 서로 다르면 결과가 1이 됩니다.
  • SELECT 6 ^ 3; -- 결과: 5 (6 = 110, 3 = 011, XOR 연산 결과: 101 = 5)

4. NOT 연산자 (~)

  • 단일 피연산자에 대해 비트 단위 NOT 연산을 수행합니다.
  • 모든 비트를 반전시킵니다 (1을 0으로, 0을 1로).
  • SELECT ~6; -- 결과: -7 (6 = 000...0110, NOT 연산 결과: 111...1001 = -7)
  • 여기서 ~ 연산자는 2의 보수를 생성하는 데 사용되며, 음수 값으로 변환됩니다.

5. 비트 시프트 연산자

  • LEFT SHIFT (<<): 왼쪽으로 비트를 이동시키며, 오른쪽은 0으로 채워집니다.
  • RIGHT SHIFT (>>): 오른쪽으로 비트를 이동시키며, 왼쪽은 0으로 채워집니다.
  • SELECT 6 << 1; -- 결과: 12 (6 = 110, 왼쪽으로 1 비트 이동: 1100 = 12) SELECT 6 >> 1; -- 결과: 3 (6 = 110, 오른쪽으로 1 비트 이동: 011 = 3)

6. 응용 예시

  • 플래그 관리: 비트 연산자를 사용하여 여러 상태 플래그를 관리할 수 있습니다. 예를 들어, 4개의 상태를 4비트로 관리할 수 있으며, 각 상태는 특정 비트를 사용하여 켜거나 끌 수 있습니다.
  • 권한 시스템: 비트 필드를 사용하여 여러 권한을 하나의 정수로 관리할 수 있습니다. 예를 들어, 읽기, 쓰기, 실행 권한을 각각 다른 비트로 관리할 수 있습니다.
# 권한을 비트로 관리 (읽기: 1, 쓰기: 2, 실행: 4)
SELECT 1 | 2 | 4; -- 결과: 7 (모든 권한을 가진 상태)
SELECT 7 & 1; -- 결과: 1 (읽기 권한 확인)

7. 주의사항

  • 비트 연산은 정수 타입에만 적용됩니다. 다른 데이터 타입에 대해 비트 연산을 수행하려면 먼저 정수로 변환해야 합니다.
  • 결과는 계산된 정수 값으로 반환되며, 비트 연산 후의 값이 음수 또는 큰 값일 수 있습니다.

비트 연산자는 매우 강력하지만, 잘못 사용하면 코드의 가독성이 떨어질 수 있으므로 필요한 곳에서만 신중하게 사용하는 것이 좋습니다.

'Development > MySql' 카테고리의 다른 글

[MySQL] 생성된 컬럼에 auto_increment 속성 부여하기  (0) 2023.08.25
[MySQL] MySQL server has gone away  (0) 2023.08.11
[MySQL] sql_mode=only_full_group_by 에러 해결 방법  (0) 2023.08.11
[MongoDB] MongoDB를 MySQL으로 마이그레이션 하기  (0) 2023.08.07
[MySQL] 테이블 깨졌을 때 복구하기  (0) 2023.08.04
'Development/MySql' 카테고리의 다른 글
  • [MySQL] 생성된 컬럼에 auto_increment 속성 부여하기
  • [MySQL] MySQL server has gone away
  • [MySQL] sql_mode=only_full_group_by 에러 해결 방법
  • [MongoDB] MongoDB를 MySQL으로 마이그레이션 하기
곽진돔
곽진돔
Developer
  • 곽진돔
    echo "곽박한 세상";
    곽진돔
  • 전체
    오늘
    어제
    • 분류 전체보기 (183)
      • Development (56)
        • Linux (13)
        • k8s (3)
        • Docker (5)
        • AWS (1)
        • PHP (35)
        • Python (21)
        • Java (1)
        • SpringBoot (4)
        • JavaScript (1)
        • React (8)
        • MySql (19)
        • MongoDB (1)
      • Daily (4)
      • Study (6)
        • TIL (1)
        • license (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 설정
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    JavaScript
    springboot
    UTF8
    정규표현식
    IP
    docker
    ssh
    스프링부트
    nodejs
    HTML
    db
    php
    MySQL
    인코딩
    Selenium
    Shell
    SQL
    CentOS
    CentOS7
    Linux
    Python
    error
    chromedriver
    react
    크롤링
    윈도우
    리눅스
    date
    리액트
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
곽진돔
[MariaDB] 비트 함수 및 연산자
상단으로

티스토리툴바