This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

OR 비트연산(|)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015년 7월⁩.

**OR 비트 연산자(|)**는 두 피연산자의 각 비트를 비교하여, 둘 중 하나라도 1인 경우 해당 비트를 1로 설정한 숫자 또는 BigInt 값을 반환합니다.

시도해 보기

const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011

console.log(a | b); // 00000000000000000000000000000111
// 예상 출력: 7

구문

js
x | y

설명

| 연산자는 숫자와 BigInt 두 가지 피연산자 타입에 대해 오버로드됩니다. 숫자의 경우 연산 결과는 32비트 정수로 반환되고, BigInt의 경우 BigInt로 반환됩니다. 연산자는 먼저 두 피연산자를 숫자형으로 강제 변환한 뒤, 두 피연산자의 타입을 검사합니다. 두 값이 모두 BigInt로 변환되면 BigInt OR 연산을 수행하고, 그렇지 않으면 두 값을 32비트 정수로 변환하여 숫자 비트 OR 연산을 수행합니다. 한쪽은 BigInt로, 다른 쪽은 숫자로 변환될 경우 TypeError가 발생합니다.

이 연산자는 2의 보수(two's complement) 표현을 기반으로 피연산자의 비트 표현에 대해 동작합니다. 첫 번째 피연산자의 각 비트는 두 번째 피연산자의 해당 위치 비트와 쌍을 이루며 각 비트 쌍에 대해 OR 연산이 적용되고, 결과는 비트 단위로 구성됩니다.

OR 연산에 대한 진리표는 다음과 같습니다.

x y x OR y
0 0 0
0 1 1
1 0 1
1 1 1
     9 (10진수) = 00000000000000000000000000001001 (2진수)
    14 (10진수) = 00000000000000000000000000001110 (2진수)
                 --------------------------------
14 | 9 (10진수) = 00000000000000000000000000001111 (2진수) = 15 (10진수)

32비트를 초과하는 숫자는 상위 비트가 버려집니다. 예를 들어, 다음과 같은 32비트보다 큰 정수는 다음과 같이 변환됩니다.

변환 전: 11100110111110100000000000000110000000000001
변환 후:             10100000000000000110000000000001

경고 : 일부 코드에서는 | 0 을 사용해 숫자를 정수로 잘라내기도 합니다. 하지만 x | 0x를 32비트 정수로 변환하면서, -2147483648 ~ 2147483647 범위를 벗어난 숫자의 상위 비트를 제거합니다. 이런 경우에는 Math.trunc()를 사용하는 것이 더 안전합니다.

BigInt의 경우에는 이런 잘림이 발생하지 않습니다. 양의 BigInt는 무한히 많은 선행 0비트, 음의 BigInt는 무한히 많은 선행 1비트를 가진 것으로 간주됩니다.

예시

비트 OR 사용하기

js
// 9  (00000000000000000000000000001001)
// 14 (00000000000000000000000000001110)

14 | 9;
// 15 (00000000000000000000000000001111)

14n | 9n; // 15n

명세서

Specification
ECMAScript® 2026 Language Specification
# prod-BitwiseORExpression

브라우저 호환성

같이 보기