336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이전 강의에서 연산자에 대해서 설명한 바가 있습니다. 이번 강의에서는 이전강의에서 설명하지 않은 '비트 단위 연산자'에 대하여 알아보고자 합니다.


1. 비트 연산자

이제 우리는 비트에 대하여 배웠으니 비트 단위 연산자에 대해 알아봅시다. 비트 단위 연산은 거의 하드웨어 관련 프로그래밍에서 사용됩니다. 이를 적절히 사용한다면 메모리 공간을 좀 더 효율적으로 활용할 수 있게 됩니다.

비트단위로 연산을 할 때는 반드시 그 대상이 정수여야만 합니다. 다음의 표를 보도록 하겠습니다.

연산자

의미

결합성

&

AND

예) a&b

왼쪽에서 오른쪽

|

OR

예) a|b

^

XOR

예) a^b

~

NOT

예) ~a

<<

왼쪽으로 이동

예) a<<2

>>

오른쪽으로 이동

예) a>>2


1) & 연산자, AND

& 연산자는 두 개의 비트가 모두 1일때 1을 반환하며 그렇지 않으면 0을 반환하는 연산자입니다.

(그림 2-3-1)

예를 들어 1바이트 크기의 자료형에 a는 10, b는 20인 두 개의 정수가 저장되어 있다고 가정합시다. 이는 각각 이진법으로 변환하면 00001010, 00010100이 됩니다.

여기서 & 연산자를 활용해 a&b를 연산하면 결과는 00000000이 나오게 됩니다.


2) | 연산자, OR

| 연산자는 두 개의 비트중 하나라도 1이면 1을 반환하며 그렇지 않으면 0을 반환하는 연산자입니다.

(그림 2-3-2)

예를 들어 1바이트 크기의 자료형에 a는 10, b는 20인 두 개의 정수가 저장되어 있다고 가정합시다. 이는 각각 이진법으로 변환하면 00001010, 00010100이 되므로

| 연산자를 활용해 a|b를 연산하면 결과는 00011110이 나오게 됩니다.


3) ^ 연산자, XOR

연산자는 두 개의 비트가 서로 다르면 1을 반환하고 그렇지 않으면 0을 반환하는 연산자입니다.

(그림 2-3-3)

예를 들어 1바이트 크기의 자료형에 a는 10, b는 20인 두 개의 정수가 저장되어 있다고 가정합시다. 이는 각각 이진법으로 변환하면 00001010, 00010100이 되므로

^ 연산자를 활용해 a^b를 연산하면 결과는 00011110이 나오게 됩니다.


4) ~ 연산자, NOT

~ 연산자는 0이면 1을, 1이면 0을 반환하는데, 보통 이는 보수 연산자로도 불립니다.

(그림 2-3-4)

예를 들어 1바이트 크기의 자료형에 a는 10으로 저장돼 있는 정수를 ~ 연산자로 통해(~a) 반전시키면 11110101이 됩니다. 이 보수 연산자는 1의 보수를 취하는 연산으로써 연산진행후 1을 더해주면 원래 값의 정수가 부호를 바꾸게 됩니다.


5) <<, >> 연산자

<< 연산자는 왼쪽으로, >> 연산자는 오른쪽으로 비트를 이동하는데 쓰이는 연산자입니다.

예를 들어 1바이트 크기의 자료형에 a는 10인 정수가 저장되어 있다고 가정합시다. 이를 이진법으로 변환하면 00001010이 됩니다.

여기서 << 연산자를 통해 a<<3 을 연산하였다면 a의 데이터가 왼쪽으로 3칸 밀리게 됩니다. 따라서 00001010이었던 데이터가 01010000 이 됩니다. 여기서 앞에 있던 000은 데이터가 밀려 삭제가 되고 뒤로 새로 생겨난 데이터는 0으로 채워지게 됩니다.

또한 이 연산을 <<연산자가 아닌 >>연산자를 통해 a>>3 을 연산하였다면 a의 데이터가 오른쪽으로 3칸이 밀려 00001010 이었던 데이터가 00000001이 됩니다. 마찬가지로 뒤에 있던 010은 밀려서 삭제가 되고 앞에 새로 생겨난 데이터는 0으로 채워지게 됩니다. 또한 a<<3 에서 상수 3대신 또 다른 변수가 와도 상관없습니다. 즉, a<<b도 허용이 된다는 뜻입니다.

또한 이 연산자를 이용하여 계산해보면 아시겠지만 이 연산자는 다음과 같은 공식을 만들수도 있습니다.

(단, 이동하는 비트의 앞 또는 뒤의 값 중 0의 갯수가 b를 넘지 않는다.)


학습내용) 우리는 이전에 배우지 못했던 비트 연산자에 대해서 배웠습니다.

+ Recent posts