ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 비트 연산자
    프로그래밍 언어/C 2016. 12. 14. 14:35
    728x90
    반응형

    비트 연산자 (Bitewise Operation)


    비트 연산자란 2진수를  비교해서 연산하는 것이다.

    비트 연산자는 메모리 공간을 제어할 수 있기때문에 하드웨어를 제어할때 좋다.


    비트 연산자들을 살펴보자.




    AND 연산자


    &연산자는 AND 라는 연산자인데 사용방법은 

    num1 & num2; 이렇게 지정해두어서 사용하기도한다.


    이것을 예를들어 비트단위로 연산이 이루어지면


    ex)


    101011101

    001011010

    ------------

    001011000


    이라는 값이 나온다.

    어떻게 해서 저런값이 나오는지 이해가 가는가?

    아직 감이 안오면 아래의 그림을 보고 이해하면된다.





    AND연산자는 각 비트단위마다 비교를해서 

    0 과 0 이 만나면 0 을 반환하고

    0 과 1 이 만나면 0 을 반환하고

    1 과 0 이 만나면 0 을 반환하고

    1 과 1 이 만나면 1 을 반환한다.


    즉, 1과 1이 아닌 모든 값들은 0 으로 처리한다.



    OR연산자


    |연산자는 OR 라는 연산자인데 사용방법은 AND연산자와 같이

    num1 | num2; 이렇게 지정해두어서 사용하기도한다.


    OR연산자를 비트단위로 연산이 이루어지면


    ex)


    101011101

    001011010

    ------------

    101011111


    이라는 값이 나온다.

    왜 이런 값이 나오게 되는지 아래의 사진을 보고 유추할 수 있다.




    OR연산자는 각 비트단위마다 비교를해서 

    0 과 0 이 만나면 0 을 반환하고

    0 과 1 이 만나면 1 을 반환하고

    1 과 0 이 만나면 1 을 반환하고

    1 과 1 이 만나면 1 을 반환한다.


    즉, 0과 0이 아닌 모든 값들은 1로 처리한다.



    XOR연산자


    ^연산자는 XOR 라는 연산자인데 사용방법은 AND연산자와 같이

    num1 ^ num2; 이렇게 지정해두어서 사용하기도한다.


    XOR연산자를 비트단위로 연산이 이루어지면


    ex)


    101011101

    001011010

    ------------

    100000111


    이라는 값이 나온다.

    왜 이런 값이 나오게 되는지 아래의 사진을 보고 유추할 수 있다.




    XOR연산자는 각 비트단위를 비교해서

    0 과 0 이 만나면 0 을 반환하고

    0 과 1 이 만나면 1 을 반환하고

    1 과 0 이 만나면 1 을 반환하고

    1 과 1 이 만나면 0 을 반환한다.


    즉, 두 2진수를 비교했을때 비교대상들이 같으면 0을 반환하고 

    같지않으면 1을 반환하는 연산자이다.



    NOT연산자


    ~연산자는 NOT 라는 연산자인데 이연산자는 단항연산자이다.

    사용방법은 변수 앞에 ~를 붙여주면된다.

    ex) ~num;


    NOT연산자를 사용하게되면


    ex)


    101011101

    ------------

    010100010


    이라는 값이 나온다.



    위의 사진처럼 비트연산을 하면

    0으로 된 비트는 1로 반환하고 

    1이 되엇떤 비트는 0으로 반환한다.


    즉, NOT연산자를 사용하게되면 비트들의 반전이 일어난다.



    SHIFT연산자 (<<)


    << 연산자는 비트들을 왼쪽으로 이동시키면서 0으로 채우는 연산자이다.

    연산자의 사용방법은 num << 이동시킬 갯수 를 지정하여 사용한다.

    ex) num<<3;


    SHIFT연산자를 사용하면


    ex) 

    num<<2;


    00001111    기존의 num값

    00111100    이동된 num값


    비트들이 왼쪽으로 2번 옮기게 되면서 값이 바뀌어진다.

    근데 여기서 중요한건 왼쪽으로 비트가 밀려가면서 

    8개였던 비트에 4개를 추가햐서 12개가 되는게 아니라

    왼쪽에 있는 비트들이 더이상 밀려날곳이 없어질때 비트들은 사라지고 

    오른쪽에는 0의 비트들이 채워진다.


    즉, 32비트에 <<연산을 해서 갯수만큼 채워지는게아니라

    밀리는 비트들은 지워지고 오른쪽에 0으로 채워진다.




    SHIFT연산자 (>>)


    << 연산자는 비트들을 오른쪽으로 이동시키면서 0으로 채우는 연산자이다.

    연산자의 사용방법은 num >> 이동시킬 갯수 를 지정하여 사용한다.

    ex) num>>3;


    SHIFT연산자를 사용하면


    ex) 

    num>>2;


    00001111    기존의 num값

    00000011   이동된 num값


    비트들이 오른쪽으로 2번 옮기게 되면서 값이 바뀌어진다.

    이것을 보면 왼쪽으로 0이 채워지면서 

    오른쪽으로 밀려갔던 비트들이 지워지는것을 확인할 수 있다.





    vol.8


    728x90
    반응형

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

    정수의 표현과 2의 보수  (0) 2016.10.22
    scanf함수 알아보자  (0) 2016.10.20
    C언어의 연산자  (0) 2016.10.18
    변수와 데이터 타입  (0) 2016.10.18
    printf 함수를 알아보자  (0) 2016.10.17
Designed by Tistory.