ref _https://developer88.tistory.com/85
논리 연산자 (logical operator)
& : 논리곱 (AND), 두 비트 모두 1일 경우만 1이 된다.
| : 논리합 (OR), 두 비트 중 하나라도 1일 경우, 1이 된다.
^ : 배타적 논리합(XOR), 두 비트 중 하나만 1일 경우 1이 된다. (둘 다 1이라면, 0)
~ : 논리 부정(NOT), 1의 보수를 가르키며 0이면 1이고, 1이면 0이다.
*보수란 : 보충하여 주는 수라는 뜻이며, 3에 대한 10의 보수는 7이다.
이동(시프트) 연산자 (shift operator) 비트를 좌측이나 우측으로 이동시키는 연산
a << b
a의 비트들을, 왼쪽으로 b만큼 이동하는 것을 의미한다. 이 때 빈자리는 0으로 채워지게 된다.
예) 8 << 3 이라고 한다면, 8은 2진수로 1000, 각 비트를 세자리씩 좌측으로 옮겨 10000000이 되므로 정수로는 8*2^3 = 64 가 된다.
a >> b
반대로, a의 비트들을 오른쪽으로 b만큼 이동하는 것을 의미한다. 이 때, 빈자리는 가장 앞자리 비트(음수, 양수를 표현하는 최상위 비트)와 같은 값으로 채워준다.
-8 >> 3 이라고 한다면 111111111111111111111111111000 (32bit) 를 우측으로 3자리만큼 옮겨서 111111111111111111111111111111 이 된다. 우측으로 이동 후 가장 좌측에는 앞자리 비트와 같은 1이 채워짐
공식으로 표현하면 a / 2^(b)와 같다
a >>> b
a>>b 연산과 다른점은, a의 비트를 b만큼 오른쪽으로 이동시키되, 빈자리는 0으로 채우는 것을 의미한다.