'>>연산자'에 해당되는 글 1건

  1. 2009.04.26 비트단위 연산자

* 비트단위 연산
  - &연산자 : 비트단위 AND
   0 & 0 : return 0
   0 & 1 : return 0
   1 & 0 : return 0
   1 & 1 : return 1

  ex)
   int a = 15  // 00000000  00000000  00000000  00001111
   int b = 20  // 00000000  00000000  00000000  00010100
   int c = a & b
   출력 결과 c = 4로 표현

           00000000  00000000  00000000  00001111
    AND 00000000  00000000  00000000  00010100
  ----------------------------------------------
           00000000  00000000  00000000  00000100 : 4


  - |연산자(OR) : 둘중에 하나라도 1(true)인경우에 반환
   0 | 0 : return 0
   0 | 1 : return 1
   1 | 0 : return 1
   1 | 1 : return 1

  ex) 
     int a = 15  // 00000000  00000000  00000000  00001111
     int b = 20  // 00000000  00000000  00000000  00010100
   int c = a | b
   출력 결과 c = 31로 표현

         00000000  00000000  00000000  00001111
    OR 00000000  00000000  00000000  00010100
  ----------------------------------------------
         00000000  00000000  00000000  00011111 : 31

 

  - ^연산자(XOR):두개가 서로 다른 경우에만 반환
   0 ^ 0 : return 0
   0 ^ 1 : return 1
   1 ^ 0 : return 1
   1 ^ 1 : return 0

  ex) 
     int a = 15  // 00000000  00000000  00000000  00001111
     int b = 20  // 00000000  00000000  00000000  00010100
   int c = a ^ b
   출력 결과 c = 27로 표현

         00000000  00000000  00000000  00001111
    OR 00000000  00000000  00000000  00010100
  ----------------------------------------------
         00000000  00000000  00000000  00011011 : 27


  
   
  - ~연산자(NOT): 값을 반대로 바꾸어 준다
   ~0 : return 1
   ~1 : return 0
   

  ex) 
     int a = 15  // 00000000  00000000  00000000  00001111
     int b = ~a  
   출력 결과 b = 27로 표현

         00000000  00000000  00000000  00001111
    -> 11111111  11111111  11111111  11110000 : (1의 보수, 부호비트도 반전)
   ->  10000000  00000000  00000000  00001111 : (1을 더함)
   ->  10000000  00000000  00000000  00010000 : (값은 -16 )

 


  - <<연산자: 왼쪽 shift연산
   a << b : a의 비트들을 b칸씩 왼쪽으로 이동한 값을 반환
   8 << 2 : 8의 비트들을 왼쪽으로 2칸씩 이동한 값을 반환
   

  ex)
     int a = 15  // 00000000  00000000  00000000  00001111
     int b = a<<2 //a의 비트들을 왼쪽으로 2칸씩 이동
   출력 결과 b = 60로 표현

        00000000  00000000  00000000  00001111
    -> 00000000  00000000  00000000  00111100 : ( 결과 : 60 )  

 

  - >>연산자: 오른쪽 shift연산
   a >> b : a의 비트들을 b칸씩 오른쪽으로 이동한 값을 반환
   8 >> 2 : 8의 비트들을 오른쪽으로 2칸씩 이동한 값을 반환
   

  ex) 
     int a = -10  // 11111111  11111111  11111111  11110110
     int b = a>>2 //a의 비트들을 오른쪽으로 2칸씩 이동
   출력 결과 b = 60로 표현

        11111111  11111111  11111111  11110110
    -> 0011111111  11111111  11111111  111101 : (0으로 채우는 시스템)
    -> 1111111111  11111111  11111111  111101 : (1로채우는 시스템)
  =====================================================
  참고) shift연산자는 시스템(처리방식)에 따라 결과 값이 달라진다

Posted by 버터백통