비트 연산자에 대하여!
비트 연산자
아래의 표는 비트연산자의 종류와 그에 따른 기능입니다.
비트 연산은 기본적으로 피연산자 사이에 비트연산자를 넣어서 사용합니다.
비트에서의 계산이기에 0, 1로 표현된 후에 계산을 해야 편합니다.
비트단위 AND연산자 : &
AND연산자는 피연산자 사이에 &을 써서 사용할 수 있습니다.
비트단위로 표현한 후 두 피연산자의 비트가 둘 다 1일때 1을 반환해줍니다.
그 외는 0을 반환합니다.
비트단위 OR연산자 : |
OR연산자인 |는 입문자들이 자판에서 찾기 힘든 문자입니다.
자판에서 ₩(원)표시인 자판을 찾아서 Shift를 누르고 치면 OR연산자(|)가 나옵니다.
비트단위로 표현한 후 두 피연산자의 비트가 둘 중 하나라도 1인 경우 1을 반환해줍니다.
그 외에는 0을 반환합니다.
비트단위 XOR연산자 : ^
XOR연산자도 마찬가지로 두 연산자 사이에 ^를 써서 사용할 수 있습니다.
XOR연산자는 특이하기 비트단위로 표현한 후 두 피연산자의 비트가 값이
같을 경우 0, 다를 경우 1을 반환해줍니다.
이런 특이한 연산자는 왜 사용하냐는 의문이 들 수 있습니다. 저 또한 그랬구요
XOR연산자는 가장 기본적인 암호화에 사용되기도 합니다.
암호화할 문장인 평문을 키값과 XOR연산을 할 경우 암호문이 나오게 됩니다.
반대로 다시 암호문에 키값을 XOR연산을 할 경우 원래의 평문이 나오게 됩니다.
예를 들어 암호문을 이용한 채팅이라면 상대방은 키값을 알아야 채팅으로 온 암호문을
키값으로 XOR연산해야 읽을수 있게 되는 것입니다.
비트단위 비트반전 연산자 : ~
비트반전 연산자인 ~는 데이터 앞에 붙일시 모든비트의 숫자를 반전시킵니다.
1의 비트는 0으로 0의 비트는 1로 반전되는 것입니다. 이 비트반전 연산자를 이용하면
해당 데이터의 1의 보수값을 쉽게 구할 수 있습니다. 참고로 여기에 1을 더하면 2의 보수가 됩니다!
Shift연산자 : << 비트 왼쪽 이동 & Shift연산자 : >> 비트 오른쪽 이동
<< Shift 연산자는 모든 비트를 왼쪽으로 이동시키는 연산자입니다.
예를 들어 num << n; 이면 num정수의 비트를 n칸만큼 왼쪽으로 이동시키는 것입니다.
반대로 >>Shift 연산자는 n칸만큼 오른쪽으로 이동시키는 것입니다.
왼쪽으로 한칸씩 이동할때마다 정수의 값은 두 배씩 증가,
오른쪽으로 한칸씩 이동할때는 반으로 감소합니다.
비트가 범위 밖으로 밀리게 되면 버려집니다.
비트를 왼쪽으로 밀어서 최상위비트에 1이 채워지면 음수가 됩니다.
최상위비트가 1일때 우측으로 이동시 0이 아닌 1로 채워집니다.
이미지 출처 : 윤성우의 열혈 C 프로그래밍