C Academy · 강의

실전 비트 기법

자주 사용하는 기법을 알아봅니다

레슨 4/413개 단계

실전 비트 기법은(는) CoddyKit의 무료 C Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

유용한 비트 트릭

비트 단위 연산자를 이해하면 간결한 여러 트릭을 사용할 수 있습니다. 이러한 방법은 빠르고 실제 코드에 자주 등장합니다.

가장 일반적인 방법을 살펴보겠습니다.

#include <stdio.h>

int main(void) {
    unsigned x = 6;
    printf("x & 1 = %u (odd if 1)\n", x & 1);
    return 0;
}

짝수 또는 홀수

가장 낮은 비트가 홀짝을 나타냅니다. x & 1은 홀수에서 1이고 짝수에서 0입니다.

#include <stdio.h>

int main(void) {
    for (unsigned x = 0; x < 5; x++) {
        printf("%u is %s\n", x, (x & 1) ? "odd" : "even");
    }
    return 0;
}

2의 거듭제곱인지 확인하기

양수에 정확히 하나의 설정된 비트가 있으면 2의 거듭제곱입니다. x & (x - 1)이라는 표현식은 이 경우에만 0입니다.

#include <stdio.h>

int is_pow2(unsigned x) {
    return x != 0 && (x & (x - 1)) == 0;
}

int main(void) {
    printf("%d %d %d\n", is_pow2(16), is_pow2(18), is_pow2(1));
    return 0;
}

가장 낮은 설정 비트 지우기

x & (x - 1)은 가장 낮은 설정 비트를 지웁니다. 이는 설정된 비트를 빠르게 세는 방법의 기반입니다.

#include <stdio.h>

int main(void) {
    unsigned x = 0b10110;
    printf("before: %u\n", x);
    printf("after:  %u\n", x & (x - 1));
    return 0;
}

가장 낮은 설정 비트만 남기기

x & (-x)는 가장 낮은 설정 비트만 남기고 다른 비트는 모두 끕니다.

이 방법은 2의 보수 표현에 의존합니다.

#include <stdio.h>

int main(void) {
    unsigned x = 0b10110;
    printf("lowest set bit = %u\n", x & (-x));
    return 0;
}

설정된 비트 세기

가장 낮은 설정 비트를 반복해서 지우면 설정된 비트의 수를 셀 수 있습니다. 필요한 단계 수는 설정된 비트의 수와 같습니다.

#include <stdio.h>

int popcount(unsigned x) {
    int n = 0;
    while (x) { x &= (x - 1); n++; }
    return n;
}

int main(void) {
    printf("%d\n", popcount(255));
    printf("%d\n", popcount(0b1010));
    return 0;
}

임시 저장 공간 없이 교환하기

XOR 교환은 추가 저장 공간 없이 두 정수를 서로 바꿉니다.

#include <stdio.h>

int main(void) {
    int a = 3, b = 8;
    a ^= b; b ^= a; a ^= b;
    printf("a=%d b=%d\n", a, b);
    return 0;
}

2의 거듭제곱으로 올림하기

최상위 비트를 아래쪽으로 퍼뜨린 다음 1을 더하면 부호 없는 값을 다음 2의 거듭제곱으로 올림할 수 있습니다.

#include <stdio.h>

unsigned next_pow2(unsigned v) {
    v--;
    v |= v >> 1; v |= v >> 2; v |= v >> 4;
    v |= v >> 8; v |= v >> 16;
    return v + 1;
}

int main(void) {
    printf("%u\n", next_pow2(17));
    printf("%u\n", next_pow2(100));
    return 0;
}

비트가 다른지 확인하기

두 값은 a ^ b에 설정된 비트가 있는 위치에서 정확히 서로 다릅니다. 이러한 비트를 세면 해밍 거리가 됩니다.

#include <stdio.h>

int main(void) {
    unsigned a = 0b1101, b = 0b1011;
    unsigned diff = a ^ b;
    int count = 0;
    while (diff) { diff &= diff - 1; count++; }
    printf("hamming distance = %d\n", count);
    return 0;
}

분기 없이 절댓값 구하기

부호 비트를 사용하면 if 없이 절댓값을 계산할 수 있습니다. 마스크는 음수에서 모두 1이고 음수가 아닌 값에서는 모두 0입니다.

#include <stdio.h>

int main(void) {
    int x = -42;
    int mask = x >> 31;
    int abs = (x + mask) ^ mask;
    printf("abs = %d\n", abs);
    return 0;
}

인덱스로 비트 설정하기

시프트와 OR을 결합하면 실행 중에 계산한 임의의 비트 위치를 설정할 수 있습니다.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    int positions[] = {1, 3, 5};
    for (int i = 0; i < 3; i++) {
        v |= (1u << positions[i]);
    }
    printf("v = %u\n", v);
    return 0;
}

빠른 확인

비트 트릭에 대한 지식을 확인해 보십시오.

복습

실용적인 비트 트릭을 배웠습니다.

  • x & 1로 홀수와 짝수를 검사합니다.
  • x & (x - 1)은 가장 낮은 설정 비트를 지우고 2의 거듭제곱인지 판별합니다.
  • x & (-x)는 가장 낮은 설정 비트만 남깁니다.
  • 팝카운트, XOR 교환, 해밍 거리, 분기 없는 절댓값 계산을 배웠습니다.
무료로 시작

AI 튜터와 함께 C을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
39
레슨
144

자주 묻는 질문

“실전 비트 기법” 강의는 무료인가요?

네 — “실전 비트 기법” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C Academy 강의 전체를 잠금 해제할 수 있습니다. C Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“실전 비트 기법”에서 뭘 배우나요?

자주 사용하는 기법을 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 C Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“실전 비트 기법” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

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