일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 장고 기초 강의
- c
- airflow
- mlops
- 장고 튜토리얼
- Django
- 쇼핑몰예제
- 개발언어
- 에어플로우 기초강의
- 기초강의
- C언어
- ADP
- 개발자취업
- 파이썬강의
- 플라스크
- 파이썬 장고
- 인공지능
- flask
- c++
- 장고
- 도커 컴포즈
- 예제프로젝트
- cpp
- 개발자
- 도커
- Python
- 파이썬
- 프로그래밍
- docker
- 웹개발
- Today
- Total
TITEDIOS Dev Note
C 기초강의: #9 비트마스킹 - 비트연산자의 활용 본문

비트마스킹(Bit Masking)은 이진수(bit) 연산을 활용하여 데이터의 특정 비트를 조작하거나 추출하는 기법입니다. 주로 비트연산자와 함께 사용되며, 메모리 효율성과 성능을 높이기 위해 사용됩니다. 비트마스킹은 플래그 관리, 비트 조작, 하드웨어 제어 등 다양한 용도로 활용됩니다.
비트마스크란?
비트마스크는 특정 비트를 선택하거나 변경하는 데 사용되는 이진 숫자입니다. 이 비트마스크를 사용하여 특정 비트를 1로 설정하거나, 0으로 클리어하거나, 반전하는 등의 작업을 수행할 수 있습니다.
비트마스킹의 주요 연산
비트마스킹을 수행하는 대표적인 사례는 임베디드 프로그래밍입니다. 우리가 사용하는 가전 기기 등에는 독립적인 프로세서들이 있어 동작을 수행하는데요 이 프로세서들은 컴퓨터나 모바일의 프로세서처럼 성능이 대단하지 못합니다(그렇다면 가전은 훨씬 비쌌을 겁니다ㅠㅜ). 따라서 효율적으로 동작을 해야합니다. 이럴 경우에 비트마스크를 사용하여 적은 메모리로도 연산 등의 작업을 수행할 수 있도록 비트마스킹을 활용합니다.
비트 설정 (Set Bit)
특정 비트를 1로 설정하기 위해 비트 OR 연산자(|)와 함께 비트마스크를 사용합니다.
// #1
int num = 0b1010; // 10 in decimal
int mask = 0b0100; // 4 in decimal, target to set the 3rd bit
num = num | mask; // 결과: 0b1110 (14 in decimal)
// #2
int num = 0b1010; // 10 in decimal
num = num | (1<<2); // 한 줄 작성
// A = A | (1<<k); // k 번째 비트를 1로 세팅
위 코드에서 mask의 비트 3이 1로 설정되어 있으므로, num의 비트 3도 1로 설정됩니다.
비트 클리어 (Clear Bit)
특정 비트를 0으로 설정하기 위해 비트 AND 연산자(&)와 비트 NOT 연산자(~)를 사용합니다.
// #1
int num = 0b1110; // 14 in decimal
int mask = 0b1011; // 11 in decimal, target to clear the 3rd bit
num = num & mask; // 결과: 0b1010 (10 in decimal)
// #2
int num = 0b1110; // 14 in decimal
num = num & ~(1<<2); // 한 줄 쓰기
// A = A & ~(1<<k); // k 번째 비트를 클리어(0로 만듬)
이 예제에서 mask의 2번째 비트가 0이므로, num의 2번째 비트가 0으로 설정됩니다.
비트 토글 (Toggle Bit)
특정 비트를 반전시키기 위해 비트 XOR 연산자(^)를 사용합니다. 이 연산을 통해 0은 1로, 1은 0으로 반전됩니다.
// #1
int num = 0b1110; // 14 in decimal
int mask = 0b0100; // 4 in decimal, target to toggle the 3rd bit
num = num ^ mask; // 결과: 0b1010 (10 in decimal)
// #2
int num = 0b1110; // 14 in decimal
num = num ^ (1<<2);
// A = A ^ (1<<k); // k 번째 비트를 토글함
여기서 mask의 3번째 비트가 1이므로, num의 3번째 비트가 반전됩니다.
비트 체크 (Check Bit)
특정 비트가 1인지 0인지 확인하기 위해 비트 AND 연산자(&)를 사용합니다.
// #1
int num = 0b1010; // 10 in decimal
int mask = 0b0010; // 2 in decimal, target to check the 2nd bit
int result = num & mask; // 결과: 0b0010 (2 in decimal)
bool isSet = result != 0; // true, 비트 2는 설정됨
// #2
int num = 0b1010; // 10 in decimal
bool isSet = (num & (1<<1)) != 0); // 한 줄 쓰기, true, 비트 2는 설정됨
// (num & (1<<k)): k 번째 비트를 확인함
여기서 result는 num의 2번째 비트가 1임을 나타냅니다.
비트마스킹의 활용 사례
- 플래그 관리: 여러 상태나 옵션을 하나의 변수로 관리할 때, 각 비트를 플래그로 사용하여 상태를 저장하고 확인할 수 있습니다.
- 퍼미션 설정: 파일 시스템에서 읽기, 쓰기, 실행 권한을 비트마스킹으로 관리할 수 있습니다.
- 데이터 압축 및 전송: 메모리 사용량을 줄이기 위해 데이터의 특정 부분만을 전송하거나 저장할 때 사용됩니다.
- 하드웨어 제어: 하드웨어 장치와 통신하거나 장치를 제어할 때 특정 비트를 설정하거나 확인하는 방식으로 제어 신호를 보낼 수 있습니다.
결론
비트마스킹은 C언어와 같은 저수준 프로그래밍에서 매우 유용한 기법입니다. 메모리 효율성과 성능을 극대화하기 위해 데이터의 특정 비트를 직접 조작하거나 확인할 수 있습니다. 이 기법을 이해하고 잘 활용하면, 복잡한 비트 연산을 간결하고 효율적으로 수행할 수 있습니다.
임베디드나 시스템프로그래밍이 아니더라도 비트마스킹을 활용한 연산은 정말 빠르게 동작합니다. 따라서, 이 연산들을 활용할 수 있다면 여러분의 프로그램의 성능은 비약적으로 향상할 수 있습니다. 잘 익히고 연습해서 개발하실 때 도움이 되셨으면 좋겠습니다.
도움이 되셨다면 공감 부탁드리겠습니다. 여러분의 공감이 정말 큰 힘이 됩니다.
감사합니다!
'C++' 카테고리의 다른 글
C 기초강의: #11 조건문 - if (0) | 2024.08.24 |
---|---|
C 기초강의: #10 반복문 - for, while (1) | 2024.08.18 |
C 기초강의: #8 연산자 (3) (0) | 2024.08.11 |
C 기초강의: #7 연산자 (2) (1) | 2024.08.10 |
C 기초강의: #6 연산자 (1) (0) | 2024.08.04 |