비트연산

비트 연산 연습 2: 시프트 연산

/*
 * 비트 연산 연습 : 시프트 연산
 *
 * 학습 목표:
 * - 왼쪽 시프트(<<): 비트를 왼쪽으로, 값 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;
}

 

댓글

댓글 본문