관리 메뉴

History

시프트 연산자와 비트연산자 step_1 본문

C,C++/개념 실습 프로그래밍

시프트 연산자와 비트연산자 step_1

luckybee 2022. 11. 19. 19:20
728x90
반응형

일반적으로 비트는 0 또는 1을 저장할 수 있는 공간이다. 예를 들면 전등을 제어하려고 한다. 전등은 키는 동작 그리고 끄는 동작이다. 전등은 이 두 가지로 제어할 수 있다. 문자 그대로 "켜지다, 꺼지다" 이렇게 제어하면 문자열을 처리해야 하기 때문에 보통 0이면 끄는 동작 1이면 키는 동작으로 우리는 약속하고 있다.

 

이러한 상황에서 우리는 0과 1을 비트로 제어할 수 있다. 

 

그러나 비트연산자를 잘 모르면 자료형 중에서 가장 작은 단위인 char(1바이트==8비트)를 사용해서 0과 1을 대입하여서 전등을 제어할 것이다. 물론 전등이 1개만 있는 경우에는 괜찮지만 800개의 전등이 있을 시  char로 전등을 제어하면 800바이트를 사용할 수밖에 없다. 

 

그러나 비트로 전등을 제어하면 100바이트로 전등을 전부 제어할 수 있기 때문에 메모리 용량을 효율적으로 제어할 수 있다. 그래서 비트 단위로 어떠한 행위를 제어하고 싶으면 반드시 시프트 연산자와 비트 연산자를 알아야한다.

 

비트 연산자를 자유자재로 바꾸고 싶다면 아래 표를 꼭 기억하자

 

2진법->16진법 변환 표

0000: 0 0100: 4 1000: 8 1100: C(12)
0001: 1 0101: 5 1001: 9 1101: D(13)
0010: 2 0110: 6 1010: A(10) 1110: E(14)
0011: 3 0111: 7 1100: B(11) 1111: F(15)

 

예를 들어 부호 없는 1바이트 data 변수를 선언하고 그 변수에 16진수 값 5A로 초기화하는 코드는 아래와 같다.

unsigned char data=0x5A; //16진수를 표시할 때는 앞에 0x를 반드시 붙여야한다.

 

그리고 16진수 한 자리는 4비트를 의미하기 때문에 아래와 같이 1바이트(8비트) 크기의 data 변수는 4자리씩 나뉜 2진법으로 표현한다.

 

2진법 변환

비트를 그림으로 그려서 설명할 때 비트 번호는 아래 그림처럼 오른쪽에서 왼쪽으로 갈수록 비트 번호가 커진다.

16진수 0x5A의 비트 패턴

 

728x90
반응형
Comments