비트 연산자(bitwise operator)

비트 연산자는 피연산자를 비트단위로 논리 연산한다. 

그런데 쓸 일이 거의 없으니 그냥 교양 정도로 보면 된다.

|(OR연산자) 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
&(AND연산자) 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^(XOR연산자) 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
x y x|y x&y x^y
1 1 1 1 0
1 0 1 0 1
0 1 1 0 1
0 0 0 0 0

연산자 ^는 배타적 XOR(eXclusive OR)라고 하며, 피연산자의 값이 서로 다른 경우, 즉 배타적인 경우에만 참(1)을 결과로 얻는다.

 

비트 연산자    
0xAB | 0xF = 0xAF
1 0 1 0 1 0 1 1
|)        0 0 0 0 1 1 1 1

0xAB
0xF
1 0 1 0 1 1 1 1 0xAF

|(OR)는 주로 특정 비트의 값을 변경할 때 사용한다.

 

 

비트 연산자    
0xAB & 0xF = 0xB
1 0 1 0 1 0 1 1
&)     0 0 0 0 1 1 1 1
0xAB
0xF
0 0 0 0 1 0 1 1 0xB

&(AND)는 주로 특정 비트의 값을 뽑아낼 때 사용한다.

 

 

비트 연산자    
0xA4 ^ 0xF = 0xAB
1 0 1 0 0 1 0 0
 ^)    0 0 0 0 1 1 1 1
0xA4
0xF
1 0 1 0 1 0 1 1 0xAB

^(XOR)는 두 피연산자의 비트가 다를 때만 1이 된다.

 

 

비트 전환 연산자 ~

x ~x
1 0
0 1

~는 주로 특정 비트의 값을 뽑아낼 때 사용한다.

주의할 점은 비트 연산자 '~'에 의해 '비트 전환'되고 나면, 부호가 있는 타입의 피연산자는 부호가 반대로 변경된다.

 

쉬프트 연산자 << >>

이 연산자는 피연산자의 각 자리를 이동한다고해서 쉬프트 연산자(shift operator)라고 이름 붙여졌다.

 

10진수 8은 2진수로표현한 뒤 쉬프트 연산자를 적용하면,

 

  << >>
연산전 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0
연산후 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0

각 각 연산 후 8이 16과 4가 되었다.

또한 쉬프트 연산자의 범위를 벗어난 값은 버려지고, 0이 된다. 이로써 알 수 있는 것은

x << n은 x * 2ⁿ의 결과와 같다.

x >> n은 x / 2ⁿ의 결과와 같다.

+ Recent posts