1. 비트 연산자 (Bit Operator, Bitwise Operator)
ㅇ 비트 단위 논리 연산자
- ~ : (비트 단위 부정)
- & : (비트 단위 논리곱)
- | : (비트 단위 논리합)
- ^ : (비트 단위 XOR)
* 例) 반가산기 : 합(sum) = (a ^ b), 캐리(carry) = (a & b)
* [C언어] 단순 비트 처리를 위한 자료형으로, 통상 unsigned char (1 바이트)을 많이 사용
ㅇ 비트 간의 시프트 연산자
- (비트) << (이동 수) : (좌로 1 비트 이동, left shift)
- (비트) >> (이동 수) : (우로 1 비트 이동, right shift)
* 비트 시프트는, 2의 거듭제곱 연산시 매우 효율적임
. 좌로 시프트(left shift)는 2의 거듭제곱으로 곱하기
.. 1 << 1 => 1 x 21 = 2 : (0001) => (0010)
.. 2 << 1 => 2 x 21 = 4 : (0010) => (0100)
.. 3 << 2 => 3 x 22 = 12 : (0011) => (1100)
. 우로 시프트(right shift)는 2의 거듭제곱으로 나누기
.. 12 >> 2 => 12 ÷ 22 = 3 : (1100) => (0011)
. 결국, 2의 거듭제곱을 계산할 때,
.. 상수 시간(시간복잡도 : O(1))에 수행되므로, 곱셈,나눗셈에 비해 매우 빠르게 됨
ㅇ (기타) (zero-fill right shift) (자바,자바스크립트 등)
- (비트) >>> (이동 수) : (우로 이동시키고, 좌의 빈 자리를 0으로 채움)
* 例) 8 >>> 2 => (1000) -> (0010)