비트 연산자

프로그래밍/C/C++ 2014. 2. 12. 14:17

비트 연산자의 필요성

8개의 LED조명을 제어하기 위한 프로그램을 생성한다고 할때

  enum {LED0 = 0, LED1, LED2, LED3, LED4, LED5, LED6, LED7};

  enum {LED_OFF = 0, LED_ON = 1};

  char mmio[8] = {0, }; // 8개의 배열을 만든뒤

  mmio[LED1] = LED_ON; //LED1의 조명 ON

  mmio[LED3] = LED_OFF; //LED3의 조명 OFF 

로 조명을 제어 할수 있습니다.

하지만 이 부분에서의 문제점은 총 8개의 비트(0, 1)만으로 충분하지만, 사용 메모리 크기는 8비트 * 8개(64비트)

공간을 할당하여 사용하고 있다는 것입니다. 각 char형의 1비트 밖에 사용하지 않고 7비트트 * 8개(56비트)의

공간이 낭비되고있는 문제점입니다.

 

이 문제를 해결하기 위해서는 8비트를 사용하여 8개의 LED를 제어하는 방법을 사용하여야합니다.

char 형의 문자형을 하나 사용하여 8비트(1바이트) 공간을 사용하는 방법을 소개합니다.

이 문제를 해결하기 위해서는 비트연산자를 활용해 각 비트의 연산이 필요합니다.

 

1. AND연산

 

 

AND연산은 위 그림과 같이 1과 1이 입력될때만 1이 출력되고 그 외의 연산은 0이 출력되는 게이트를 말합니다.

 

2. OR연산

 

 

 

OR연산은 위 그림과 같이 0과 0이 입력될때만 0이 출력되고 그 외의 연산은 1이 출력되는 게이트를 말합니다.

(입력 게이트로 하나라도 1이 포함되면 1이 출력)

 

3. NOT연산

NOT연산은 위 그림과 같이 0을 NOT연산자를 취하면 1이 출력되고, 1을 NOT연산자를 취하면 0이 출력됩니다.(반대로 출력)

 

4. SHIFT 연산

  데이터 << 이동할 비트 수

 데이터 >> 이동할 비트 수

 

SHIFT연산은 메모리 상을 비트 단위로 이동하는 것을 말합니다. 데이터를 비트 단위로 좌, 우로 이동하는

기능을 합니다.

규칙1. 특정 비트를 설정하려면 OR연산자를 사용합니다.

 char mmio = 0; // 0000 0000

규칙2. 특정 비트를 검색하려면 AND연산자를 활용합니다.

규칙3. 특정 비트를 초기화하려면 &연산자와 비트 반전 연산자(~, NOT)을 사용합니다.

 

 

 

 

'프로그래밍 > C/C++' 카테고리의 다른 글

C++ 파일 입출력  (0) 2014.02.24
함수 주요 형태(_stdcall, _cdecl, _fastcall)  (0) 2014.02.24
함수 포인터  (0) 2014.02.12
[STL]컨테이너 선택  (0) 2014.02.09
[STL] 제네릭 알고리즘 Generic Algorithm  (0) 2014.02.09