/*
* 비트 연산 연습 : 시프트 연산
*
* 학습 목표:
* - 왼쪽 시프트(<<): 비트를 왼쪽으로, 값 x2
* - 오른쪽 시프트(>>): 비트를 오른쪽으로, 값 /2
* - (1 << n) 패턴 이해하기
*/
#include <stdio.h>
// 8비트 2진수로 출력하는 함수
void printBinary(unsigned char num)
{
for (int i = 7; i >= 0; i--)
{
if (num & (1 << i))
printf("1");
else
printf("0");
}
}
int main(void)
{
unsigned char value;
printf("=====================================\n");
printf(" 시프트 연산 연습\n");
printf("=====================================\n\n");
// 왼쪽 시프트 예제
printf("----- 왼쪽 시프트 (<<) -----\n");
printf("값이 2배씩 커집니다\n\n");
value = 1;
for (int i = 0; i <= 7; i++)
{
printf("1 << %d = %3d = ", i, (1 << i));
printBinary(1 << i);
printf("\n");
}
printf("\n");
// 오른쪽 시프트 예제
printf("----- 오른쪽 시프트 (>>) -----\n");
printf("값이 2로 나눠집니다\n\n");
value = 128;
printf("시작값: %d\n\n", value);
for (int i = 0; i <= 7; i++)
{
printf("%3d >> %d = %3d = ", 128, i, (128 >> i));
printBinary(128 >> i);
printf("\n");
}
printf("\n");
// (1 << n) 패턴 설명
printf("=====================================\n");
printf("핵심 패턴: (1 << n)\n");
printf("=====================================\n");
printf("n번 비트 위치에 1을 만듭니다\n\n");
printf("비트번호: 7 6 5 4 3 2 1 0\n");
printf(" ----------------------\n");
for (int n = 0; n <= 7; n++)
{
printf("1 << %d : ", n);
printBinary(1 << n);
printf(" ← %d번 비트\n", n);
}
return 0;
}