검색결과 리스트
글
비트 연산자
비트 연산자의 필요성
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 |