/*
* 비트 연산 연습 3: 핵심 패턴 4가지
*
* 학습 목표 (암기!):
* 1. 켜기: value |= (1 << n)
* 2. 끄기: value &= ~(1 << n)
* 3. 토글: value ^= (1 << n)
* 4. 확인: if (value & (1 << n))
*/
#include <stdio.h>
// 8비트 2진수로 출력하는 함수
void printBinary(unsigned char num)
{
printf("[");
for (int i = 7; i >= 0; i--)
{
if (num & (1 << i))
printf("1");
else
printf("0");
}
printf("]");
}
// 비트 상태를 보기 쉽게 출력
void printBitStatus(unsigned char value)
{
printf("비트: 7 6 5 4 3 2 1 0\n");
printf("값: ");
for (int i = 7; i >= 0; i--)
{
if (value & (1 << i))
printf(" 1 ");
else
printf(" 0 ");
}
printf("\n");
}
int main(void)
{
unsigned char value = 0b00000000; // 시작: 모든 비트 0
int bitNum;
printf("=====================================\n");
printf(" 비트 조작 핵심 패턴 4가지\n");
printf("=====================================\n\n");
// 초기 상태
printf("초기값: ");
printBinary(value);
printf(" = %d\n\n", value);
printBitStatus(value);
printf("\n");
// 1. 비트 켜기 (SET)
printf("===== 1. 비트 켜기 (SET) =====\n");
printf("패턴: value |= (1 << n)\n\n");
value = 0;
printf("3번 비트 켜기: value |= (1 << 3)\n");
value |= (1 << 3);
printf("결과: ");
printBinary(value);
printf(" = %d\n", value);
printBitStatus(value);
printf("\n");
printf("5번 비트도 켜기: value |= (1 << 5)\n");
value |= (1 << 5);
printf("결과: ");
printBinary(value);
printf(" = %d\n", value);
printBitStatus(value);
printf("\n");
// 2. 비트 끄기 (CLEAR)
printf("===== 2. 비트 끄기 (CLEAR) =====\n");
printf("패턴: value &= ~(1 << n)\n\n");
printf("3번 비트 끄기: value &= ~(1 << 3)\n");
value &= ~(1 << 3);
printf("결과: ");
printBinary(value);
printf(" = %d\n", value);
printBitStatus(value);
printf("\n");
// 3. 비트 토글 (TOGGLE)
printf("===== 3. 비트 토글 (TOGGLE) =====\n");
printf("패턴: value ^= (1 << n)\n");
printf("(0이면 1로, 1이면 0으로)\n\n");
printf("현재: ");
printBinary(value);
printf("\n");
printf("5번 비트 토글: value ^= (1 << 5)\n");
value ^= (1 << 5);
printf("결과: ");
printBinary(value);
printf(" (5번이 꺼짐)\n\n", value);
printf("5번 비트 다시 토글\n");
value ^= (1 << 5);
printf("결과: ");
printBinary(value);
printf(" (5번이 다시 켜짐)\n\n", value);
// 4. 비트 확인 (CHECK)
printf("===== 4. 비트 확인 (CHECK) =====\n");
printf("패턴: if (value & (1 << n))\n\n");
value = 0b00101000; // 3번, 5번 비트가 1
printf("value = ");
printBinary(value);
printf("\n\n");
for (int i = 0; i <= 7; i++)
{
printf("%d번 비트: ", i);
if (value & (1 << i))
printf("1 (켜짐)\n");
else
printf("0 (꺼짐)\n");
}
printf("\n=====================================\n");
printf("암기하세요!\n");
printf("=====================================\n");
printf("켜기: value |= (1 << n)\n");
printf("끄기: value &= ~(1 << n)\n");
printf("토글: value ^= (1 << n)\n");
printf("확인: if (value & (1 << n))\n");
printf("=====================================\n");
return 0;
}