mozilla
검색 결과

    Bitwise Operators


    비트 연산자

    비트 연산자는 피연산자를 10진수나 16진수, 8진수로 다루지 않고 32개의 비트 집합으로 다룹니다. 예를 들어, 10진수 9는 2진수로 1001입니다. 비트 연산자는 2진수 표현으로 연산을 하지만 반환값은 JavaScript 표준 수 값으로 반환합니다.

    JavaScript의 비트 연산자를 다음 표에 요약했습니다.

    연산자 사용법 설명
    비트 AND a & b 두 피연산자의 대응되는 비트가 모두 1이면 1을 반환.
    비트 OR a | b 두 피연산자의 대응되는 비트에서 둘 중 하나가 1이거나 모두 1인 경우 1을 반환.
    비트 XOR a ^ b 두 피연산자의 대응되는 비트에서 둘 중 하나가 1이고, 둘 다 1이 아닐 경우 1을 반환.
    비트 NOT ~ a 피연산자의 비트를 뒤집음.
    왼쪽으로 이동 a << b a의 2진수 표현을 b 비트만큼 왼쪽으로 이동함. 오른쪽은 0으로 채움.
    부호 비트로 채우는 오른쪽 이동 a >> b a의 2진수 표현을 b 비트만큼 오른쪽으로 이동함. 오른쪽 남는 비트는 버림.
    0으로 채우는 오른쪽 이동 a >>> b a의 2진수 표현을 b 비트만큼 오른쪽으로 이동함. 오른쪽 남는 비트는 버리고, 왼쪽은 0으로 채움.

    표 3.5: 비트 연산자

    비트 논리 연산자

    개념적으로 비트 논리 연산자는 다음과 같이 동작합니다.

    • 피연산자는 32비트 정수로 변환되어 비트의 나열로 표현됩니다.
    • 두 피연산자의 비트를 같은 위치에 있는 것 끼리 짝을 짓습니다.
    • 짝 지어진 각각의 쌍에 대해서 연산자를 적용하여 결과를 만들어냅니다.

    예를 들어, 9를 2진수로 쓰면 1001이고 15를 2진수로 표현하면 1111입니다. 두 값에 비트 연산을 적용하면 결과는 다음과 같습니다.

    • 15 & 9 yields 9 (1111 & 1001 = 1001)
    • 15 | 9 yields 15 (1111 | 1001 = 1111)
    • 15 ^ 9 yields 6 (1111 ^ 1001 = 0110)

    비트 이동 연산자

    비트 이동 연산자는 피연산자 두 개를 받습니다. 첫 번째는 이동하려는 수이고, 두 번째는 첫 번째 피연산자를 몇 비트나 이동시킬지 나타내는 비트 수입니다. 이동 방향은 사용된 연산자에 따라 다릅니다.

    이동 연산자는 피연산자를 32비트 정수로 변환하여 연산하고, 왼쪽 연산자와 같은 자료형으로 반환합니다.

    이동 연산자는 다음 표에 있습니다.

    연산자 설명 예제
    <<
    (왼쪽 이동)
    이 연산자는 첫 번째 피연산자의 비트를 지정된 수만큼 왼쪽으로 옮깁니다. 왼쪽으로 넘친 비트는 버립니다. 오른쪽 빈 자리는 0으로 채웁니다. 9<<2는 36을 반환합니다. 1001을 왼쪽으로 2비트 이동하면 100100이 되고 이것은 36이기 때문입니다.
    >>
    (부호 비트로 채우는 오른쪽 이동)
    이 연산자는 첫 번째 피연산자의 비트를 지정된 수 만큼 오른쪽으로 옮깁니다. 오른쪽으로 넘친 비트는 버립니다. 왼쪽 빈 자리는 원래 가장 왼쪽에 있던 비트 값으로 채웁니다. 9>>2는 2를 반환합니다. 1001을 2비트 오른쪽으로 이동하면 10이 되는데 이것은 2이기 때문입니다. 비슷하게 -9>>2는 -3을 반환하는데, 부호가 유지되기 때문입니다.
    >>>
    (0으로 채우는 오른쪽 이동)
    이 연산자는 첫 번째 피연산자의 비트를 지정된 수 만큼 오른쪽으로 옮깁니다. 오른쪽으로 넘친 비트는 버립니다. 왼쪽 빈 자리는 0으로 채웁니다. 19>>>2는 4를 반환합니다. 10011을 2비트 오른쪽으로 이동하면 100이 되기 때문입니다. 음수가 아닌 수에 대해서는 0을 채우는 오른쪽 이동이나 부호 비트로 채우는 오른쪽 이동이 똑같은 결과를 반환합니다.

    표 3.6: 비트 이동 연산자

    문서 태그 및 공헌자

    Contributors to this page: Wafe, teoli
    최종 변경: teoli,