비트 마스크와 플래그
비트를 설정하고 해제하고 전환합니다
비트 마스크와 플래그은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
플래그로 사용하는 비트
하나의 정수에 여러 켜기/끄기 설정을 비트마다 하나씩 저장할 수 있습니다. 각 비트가 플래그입니다.
이 방식은 크기가 작고 빠르며, 운영 체제와 임베디드 코드에서 흔히 사용됩니다.
#include <stdio.h>
int main(void) {
unsigned flags = 0;
printf("Initial flags = %u\n", flags);
return 0;
}마스크 정의하기
마스크는 특정 비트가 설정된 값입니다. 각 플래그를 2의 거듭제곱으로 정의하면 각각 고유한 비트를 차지합니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
printf("READ=%u WRITE=%u EXEC=%u\n", READ, WRITE, EXEC);
return 0;
}비트 설정하기
플래그를 켜려면 값에 마스크를 OR 연산합니다: flags |= MASK.
이미 설정된 비트는 계속 설정된 상태로 유지됩니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = 0;
flags |= READ;
flags |= WRITE;
printf("flags = %u\n", flags);
return 0;
}비트 지우기
플래그를 끄려면 반전된 마스크와 AND 연산합니다: flags &= ~MASK.
반전된 마스크는 대상 비트가 0이고 나머지 모든 위치가 1입니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ | WRITE;
flags &= ~WRITE;
printf("flags = %u\n", flags);
return 0;
}비트 전환하기
플래그를 전환하려면 마스크와 XOR 연산합니다: flags ^= MASK.
켜져 있었다면 꺼지고, 꺼져 있었다면 켜집니다.
#include <stdio.h>
#define EXEC (1u << 2)
int main(void) {
unsigned flags = 0;
flags ^= EXEC;
printf("after toggle: %u\n", flags);
flags ^= EXEC;
printf("after toggle: %u\n", flags);
return 0;
}비트 검사하기
플래그가 켜져 있는지 확인하려면 마스크와 AND 연산한 결과를 검사합니다: 설정되어 있으면 flags & MASK는 0이 아닙니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ;
if (flags & READ) printf("READ is on\n");
if (flags & WRITE) printf("WRITE is on\n");
else printf("WRITE is off\n");
return 0;
}여러 플래그 설정하기
여러 플래그를 한 번에 설정하려면 마스크를 OR로 결합합니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
unsigned flags = READ | WRITE | EXEC;
printf("all set: %u\n", flags);
return 0;
}여러 비트를 한 번에 확인하기
그룹의 모든 비트가 설정되었는지 검사하려면 결합한 마스크와 AND 연산한 뒤 결과를 마스크 자체와 비교합니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ | WRITE;
unsigned need = READ | WRITE;
if ((flags & need) == need) printf("both present\n");
return 0;
}활성 플래그 출력하기
마스크를 순회하며 현재 켜져 있는 플래그를 출력합니다.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
unsigned flags = READ | EXEC;
if (flags & READ) printf("R");
if (flags & WRITE) printf("W");
if (flags & EXEC) printf("X");
printf("\n");
return 0;
}설정된 비트 세기
켜져 있는 플래그의 수를 알려면 가장 낮은 설정 비트를 반복해서 지우며 설정된 비트를 셉니다.
#include <stdio.h>
int main(void) {
unsigned v = 0b10110;
int count = 0;
while (v) {
v &= (v - 1);
count++;
}
printf("set bits = %d\n", count);
return 0;
}플래그에 열거형 사용하기
enum을 사용하면 플래그 정의를 체계적으로 정리하고 읽기 쉽게 만들 수 있습니다.
#include <stdio.h>
enum { OPT_A = 1, OPT_B = 2, OPT_C = 4 };
int main(void) {
unsigned opts = OPT_A | OPT_C;
printf("opts = %u\n", opts);
if (opts & OPT_C) printf("C enabled\n");
return 0;
}빠른 확인
마스크와 플래그에 대한 지식을 확인해 보십시오.
복습
비트 플래그를 관리하는 방법을 배웠습니다.
flags |= MASK로 설정합니다.flags &= ~MASK로 지웁니다.flags ^= MASK로 전환합니다.flags & MASK로 검사합니다.- 마스크는 2의 거듭제곱으로 정의하며, 매크로나 열거형을 사용하는 경우가 많습니다.
자주 묻는 질문
“비트 마스크와 플래그” 강의는 무료인가요?
네 — “비트 마스크와 플래그” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“비트 마스크와 플래그”에서 뭘 배우나요?
비트를 설정하고 해제하고 전환합니다 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“비트 마스크와 플래그” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.