실전 비트 기법
자주 사용하는 기법을 알아봅니다
실전 비트 기법은(는) 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 비트 연산자
- 시프트
- 비트 마스크와 플래그
- 실전 비트 기법