티스토리 뷰

Dev/C & C++

BIT 연산자

Dev gOm 2016. 9. 13. 19:43

Bit 연산자?


    • bit 연산이란 데이터의 최소단위(bit, 0,1)의 연산을 위해 사용되는 부호들을 의미한다. 
    • 비트 연산자의 피연산자는 정수 계열 형식(int, long , uint 등)이여야 한다.
    • 개인적으로 실무에서 구현당시 직접 사용할 일은 거의 없으나 펌웨어, 각종 라이브러리 에서 사용되어지기 때문에 원리는 꼭 이해를 하고 있어야한다.

연산자의 종류


    • & ( AND 연산자 ) [AND] : 피연산자 서로의 비트를 비교하여 양쪽 모두 1인 경우에만 해당비트는 1로 설정된다.
      • 0000 1111 & 0000 1010 = 0000 1010      
    • | ( 포괄적 OR 연산자 ) [OR] : 피연산자 서로의 비트중 한쪽이 1인경우 해당비트는 1로 설정된다.
      • 0000 1111 | 0000 1010 = 0000 1111
    • ^( 베타적 OR 연산자 ) [XOR] : 피연산자 서로의 비트가 서로 다를 경우 해당비트는 1로 설정된다.
      • 0000 1111 & 0000 1010 = 0000 0101
    • << (왼쪽 쉬프트 연산) : 피연산자의 비트를 우항에 지정된 비트 수만큼 왼쪽으로 이동한다.
      • 0000 1111 << 4 = 1111 0000 
    • >> (우측 쉬프트 연산) : 피연산자의 비트를 우항에 지정된 비트 수만큼 오른쪽으로 이동한다.
      • 1111 0000 >> 4 = 0000 1111
    • 주의사항
      • 피연산자가 양수인 경우 쉬프트연산(>>) 수행시 좌측에 추가되는 비트는 0이다.
        • 0000 1111 >> 2 = 0000 0011
      •  음수인경우 우측 쉬프트 연산(>>) 수행시 좌측에 추가되는 비트는 1이니 이점을 주의해야한다.
        • 1111 1001 >> 2 = 1111 1110 

Example


    • int형 값을 32bit 형태로 출력해주는 프로그램.
    // int형 input을 32bit 로 변환하여 출력해주는 프로그램.
    void printBit(int input)
    {
    	int i,check = 1;
    	char bit;
    
    	for(i=31;i>=0;i--)
    	{
    		bit=(input&(1<<i))?1:0; // i 번째 bit를 뽑아낸다
    		printf("%d", bit);
    		if(i%4 == 0) printf(" ");
    	}
    	printf("\n");
    }
  • 연산
  • int main(void)
    {
    	int a = 0xFFFF; // 0000 0000 0000 0000 1111 1111 1111 1111
    	int b = 0xF0F0F0F0; // 1111 0000 1111 0000 1111 0000 1111 0000
    
    	printf("a : %d ,b : %d\n", a,b);
    
    	printBit(a);
    	printBit(b);
    	printf("AND연산 : "); 
    	printBit(a & b); // AND
    	printf("OR연산 : "); 
    	printBit(a | b); // OR
    	printf("XOR연산 : "); 
    	printBit(a ^ b); // XOR
    	printf("NOT연산 : "); 
    	printBit(~a);
    	printf("NOT연산 : "); 
    	printBit(~b);
    	printf("오른쪽 쉬프트 4 : "); 
    	printBit(a >> 4);
    	printf("오른쪽 쉬프트 4 : "); 
    	printBit(b >> 4);
    
    	return 0;
    }
    
  • 결과

붉은색 영역처럼 음수에 우측쉬프트를 수행할경우 좌측 비트는 1이 추가된다.

  • Set ( 특정 비트를 1로 만드는 연산 ) TBC...
  • Clear ( 특정 비트를 0으로 만드는 연산 ) TBC...

Reference.


'Dev > C & C++' 카테고리의 다른 글

int to bit  (0) 2016.12.01
BITMASK, 비트마스크  (0) 2016.09.13
조건 연산자  (0) 2016.09.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함