0Pricing
C Academy · 강의

비트 마스크와 플래그

비트를 설정하고 해제하고 전환합니다

비트 마스크와 플래그은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 비트 연산자
  2. 시프트
  3. 비트 마스크와 플래그
  4. 실전 비트 기법
← C Academy(으)로 돌아가기