비트 연산자는 정수의 이진 표현, 즉 비트(0과 1) 단위로 계산하는 연산자다. 주로 성능 최적화, 메모리 절약, 알고리즘 구현 등에서 사용한다. 자바스크립트는 64비트 부동소수점 형식으로 숫자를 저장하지만, 비트 연산을 수행할 땐 내부적으로 피연산자를 32비트 정수로 변환한다. 이는 비트 연산이 정수에만 적용되기 때문. 변환 과정에서 소수부는 버려지고 32비트 정수만 연산에 사용된다.

5(10) = 00000000000000000000000000000101(2)

2의 보수 표현법


2의 보수 표현법은 비트를 이용해 음수를 나타내는 표준 방식으로, 정수의 이진 표현에서 모든 비트를 반전시킨 후(1의 보수) 1을 더하는 방식으로 계산한다. 즉, 1의 보수에 1을 더하면 2의 보수가 된다.

이때 최상위 비트(Most Significant Bit; 부호 비트; 가장 왼쪽에 있는 비트)가 0이면 양수, 1이면 음수를 나타낸다. 2의 보수 표현법은 음수를 나타내는 방식이므로 양수는 이진수 표현을 그대로 사용한다.

음수 -5를 2의 보수로 표현하는 과정은 아래와 같다.

  1. 절대값(5)의 이진 표현을 구한다.

    00000000000000000000000000000101
    
  2. 1의 보수로 변환: 모든 비트를 반전 시킨다.

    11111111111111111111111111111010
    
  3. 2의 보수로 변환: 반전된 숫자에 1을 더한다. 모든 비트를 반전시켜서 1의 보수를 만들면 원래 절대값에서 1이 감소하게 된다(5 → 4). 이를 보완하기 위해 1을 더하는 것.

    11111111111111111111111111111010
    +                              1
    --------------------------------
    11111111111111111111111111111011
    

반대로 2의 보수로 표현된 음수를 10진수로 변환할 땐, ①모든 비트를 반전 시킨 후(1의 보수로 변환) ②1을 더한 다음(2의 보수로 변환) ③10진수로 변환한다. 마지막으로 ④결과값에 음수 부호를 추가한다.

비트 연산자


AND, OR, XOR 예시는 편의를 위해 4비트로만 표현했다. e.g. 5₍₁₀₎ → 0101₍₂₎

AND &

특정 비트를 확인하거나 0으로 설정할 때 자주 사용 (비트마스크에선 교집합)

두 피연산자의 각 비트를 비교하여 둘 다 1이면 1 반환, 아니면 0 반환(곱연산).

const result = 5 & 3; // 1