[C언어/C++] 비트 쪼개기 (Bit Split) 사용법 & 예제 (비트연산 활용)

int형의 값의 범위는 –2,147,483,648 ~ 2,147,483,647입니다. 이렇게 큰 숫자를 저장할 수 있는 공간이죠. 하지만 우리는 int타입에 이렇게 큰 값을 잘 넣어서 사용하지는 않습니다. 그렇다면 그만큼의 공간이 낭비되는 셈입니다. 그렇다면 int형을 반으로 나눠서 사용할 수는 없을까요? 가능합니다. 비트 연산자의 간단한 기법을 통해서 말이죠. 이렇게 된다면 하나의 int값 안에 2개의 값을 넣을수가 있게 되겠죠.

 

참고로 이러한 방법들은 실제 코딩에서는 잘 사용되지 않습니다. 메모리를 타이트하게 잡고싶다면 __int8, __int16과 같은 변수타입을 선언해서 사용하면 됩니다. 

 

비트 쪼개기 (Bit Split) 사용법 & 예제 (비트연산 활용)

#include <stdio.h>

int main() {
    unsigned int num = 0;
    unsigned int value = 0;
    unsigned int temp = 0;
    int location = 0;
    
    for (;;) {
        printf("location(1 ~ 2) : ");
        scanf_s("%d", &location);
        
        //위치 범위 예외
        if (location < 1 || location > 2) {
            printf("위치 범위를 초과하였습니다.\n\n");
            continue;
        }
        location--;
        
        printf("input Data (0 ~ 65535) : ");
        scanf_s("%d", &value);
        
        if (value < 0 || value > 65535) {
            printf("값 범위를 초과하였습니다.\n\n");
            continue;
        }
        
        //비트 입력
        temp = 0xff << location * 16;
        num = num & ~temp;
        num = num | (value << (location) * 16);
        
        for (int i = 0; i < 2; i++) {
            printf("[%d]번째 비트의 값(10진수) : %d\n", i + 1, (num >> i * 16) & 0x0000FFFF);
        }
        printf("\n");
        
        for (int i = 0; i < 32; i++) { //전체 비트 출력
            int result = num >> i & 1;
            printf("%d", result);
            
            if ((i+1) % 16 == 0)printf(" ");
        }
        printf("\n\n");
    }
}

비트쪼개기 예제

댓글

Designed by JB FACTORY