CCalculate.Studio

💾 비트 연산 계산기

비트 연산은 수를 하나의 10진수 값으로 다루는 대신 그 수의 2진 표현을 이루는 각각의 2진 자리(비트)에 직접 작용합니다. 이 계산기는 음이 아닌 32비트 정수에 대해 여섯 가지 표준 비트 연산 — AND, OR, XOR, NOT, 왼쪽 시프트, 오른쪽 시프트 — 를 수행하고 입력값과 결과의 2진 표현을 함께 보여 줍니다.

최종 검토일: 2026-07-07
Add as preferred on Google

비트 연산 진리표 이해하기

각 논리적 비트 연산은 대응하는 모든 비트 자리 쌍에 독립적으로 적용되는 고정된 진리표를 따릅니다.

비트 A비트 BANDORXOR
00000
01011
10011
11110
  • 이 계산기는 입력을 부호 있는 32비트 정수의 범위(0부터 2,147,483,647까지)로 제한합니다. JavaScript의 비트 연산자가 ECMAScript 명세에 따라 연산 전에 수를 내부적으로 32비트 표현으로 변환하기 때문입니다.
  • NOT (~A)은 부호 있는 32비트 정수로 해석하면 언제나 −(A + 1)과 같은 결과를 냅니다. 이 계산기는 표시되는 2진 표현이 모호하지 않도록 부호 없는 32비트 등가값을 보여 줍니다(예: ~12는 −13이 아니라 4,294,967,283으로 표시됩니다).
  • 31보다 큰 시프트 자릿수(B)는 이 계산기에서 31로 제한됩니다. JavaScript에서 32비트 값을 32자리 이상 시프트하면 직관적으로 기대하는 0이 나오는 대신 (시프트 자릿수의 하위 5비트만 사용하여) 값이 돌아 감기기 때문입니다.

비트 연산이란 무엇입니까?

비트 연산은 일반적인 10진 산술을 수행하는 대신 2진 표현의 0과 1을 비교하거나 이동시키면서 수를 개별 2진 자리(비트) 수준에서 처리합니다. 모든 정수는 각각 2의 거듭제곱을 나타내는 비트들의 나열로 2진수로 쓸 수 있습니다. 예를 들어 12의 2진 표현은 1100이며, 이는 1×8 + 1×4 + 0×2 + 0×1을 뜻합니다.

논리적 비트 연산인 AND(논리곱), OR(논리합), XOR(배타적 논리합), NOT(비트 반전)은 불 논리의 표준 규칙에 따라 두 수의 대응하는 비트 자리를 비교하거나(또는 한 수의 비트를 반전하며) 각 비트 자리에 독립적으로 적용됩니다. 시프트 연산인 왼쪽 시프트와 오른쪽 시프트는 어떤 수의 모든 비트를 지정한 자릿수만큼 왼쪽 또는 오른쪽으로 옮기는데, 이는 수학적으로 2의 거듭제곱을 곱하거나 나누는 것과 같습니다.

비트 연산은 컴퓨터 과학과 저수준 프로그래밍의 기본입니다. 여러 옵션의 개별 플래그를 설정하고 해제하고 확인하는 데(비트 플래그), 2의 거듭제곱에 의한 빠른 곱셈과 나눗셈에, 암호 알고리즘에, 그래픽과 색상 처리(빨강/초록/파랑 채널 결합)에, 그리고 조밀한 데이터 인코딩에 쓰입니다.

이 비트 연산 계산기 사용 방법

  1. 첫 번째 수(A)를 음이 아닌 정수로 입력합니다(0부터 2,147,483,647까지, 부호 있는 32비트 정수의 범위).
  2. 두 번째 수(B)를 입력합니다. AND, OR, XOR에서 이 값은 A와 비트 단위로 비교되는 두 번째 피연산자입니다. 시프트 연산에서는 이동할 자릿수이며(0–31이 유효하고, 더 큰 값은 31로 제한됩니다), NOT은 A만을 대상으로 하므로 B는 무시됩니다.
  3. 연산을 선택합니다: AND, OR, XOR, NOT, 왼쪽 시프트, 오른쪽 시프트.
  4. 10진수 결과와 함께 A, B(또는 시프트 자릿수), 그리고 결과의 2진 표현을 확인합니다.

각 비트 연산의 작동 방식

AND: 대응하는 두 비트가 모두 1일 때만 결과 비트가 1입니다
OR: 대응하는 비트 중 적어도 하나가 1이면 결과 비트가 1입니다
XOR: 대응하는 비트 중 정확히 하나만 1이면 결과 비트가 1입니다
왼쪽 시프트: A << B = A × 2^B; 오른쪽 시프트: A >> B = ⌊A ÷ 2^B⌋
계산 예시: 12 AND 10 = 8; 12 OR 10 = 14; 12 XOR 10 = 6; 12 << 2 = 48; 12 >> 2 = 3

AND는 각 비트 자리를 비교해 두 비트가 모두 1인 경우에만 1을, 그렇지 않으면 0을 반환합니다. 계산 예시: 12 (1100) AND 10 (1010) = 8 (1000). 두 수 모두에서 1인 자리는 세 번째 비트 자리(값 8)뿐이기 때문입니다.

OR는 각 비트 자리를 비교해 두 비트 중 적어도 하나가 1이면 1을 반환합니다. 계산 예시: 12 (1100) OR 10 (1010) = 14 (1110). XOR(배타적 논리합)는 두 비트 중 정확히 하나만 1인 자리에서 1을 반환합니다(둘 다 1이면 아닙니다). 계산 예시: 12 (1100) XOR 10 (1010) = 6 (0110).

NOT은 하나의 수의 모든 비트를 반전합니다(0은 1이 되고 1은 0이 됩니다). 이 계산기는 32비트 값으로 연산하므로 NOT 12는 32개의 비트를 모두 뒤집어, 부호 없는 32비트 정수로 해석하면 4,294,967,283을 만들어 냅니다(부호 있는 정수로 해석하면 −13의 2의 보수 표현입니다).

왼쪽 시프트 (A << B)는 A의 모든 비트를 왼쪽으로 B자리 옮기고 비워진 하위 비트를 0으로 채웁니다. 이는 A에 2^B를 곱하는 것과 같습니다. 계산 예시: 12 << 2 = 48 (12 × 2² = 12 × 4 = 48과 같습니다). 오른쪽 시프트 (A >> B)는 A의 모든 비트를 오른쪽으로 B자리 옮기고 하위 비트를 버립니다. 이는 A를 2^B로 나눈 정수 나눗셈(내림)과 같습니다. 계산 예시: 12 >> 2 = 3 (⌊12 ÷ 4⌋ = 3과 같습니다).

흔한 실수

  • 비트 AND/OR를 논리 AND/OR와 혼동하는 것 — 비트 연산자는 수의 모든 비트에 독립적으로 작용하지만, 논리 연산자는 값 전체를 하나의 참/거짓 조건으로 다룹니다. 두 연산은 0과 1이라는 특수한 값의 경우를 제외하면 서로 다른 결과를 냅니다.
  • 큰 자릿수만큼의 왼쪽 시프트가 언제나 비례해서 더 큰 수를 만든다고 기대하는 것 — 충분히 멀리 시프트하면 의미 있는 비트가 32비트 경계를 넘어 밀려나 버려지게 됩니다(오버플로).
  • NOT 결과를 잘못 읽는 것 — NOT은 32개 비트를 모두 뒤집기 때문에 ~A의 부호 없는 10진수 결과는 A 자신보다 훨씬 커 보이지만, 부호 있는 2의 보수로 해석하면 실제로는 작은 음수 −(A+1)을 나타냅니다.
  • 오른쪽 시프트를 언제나 단순한 나눗셈과 같다고 여기는 것 — 음이 아닌 정수에 대한 오른쪽 시프트는 2의 거듭제곱에 의한 정수 내림 나눗셈과 정확히 일치하지만, 음수의 경우에는 산술 시프트인지 논리 시프트인지에 따라 동작이 달라집니다.

자주 묻는 질문

비트 AND와 논리 AND의 차이는 무엇입니까?

비트 AND(&)는 두 수를 비트 단위로 비교하여 대응하는 두 입력 비트가 모두 1인 자리에서만 1이 되는 새로운 수를 반환합니다. 예를 들어 12 & 10 = 8입니다. 논리 AND(&&)는 각 값 전체를 하나의 참/거짓 조건으로 다루어 개별 비트를 결합하는 대신 참 여부를 평가하고 원래 피연산자 중 하나 또는 불 값을 반환합니다. 두 연산자는 목적이 다르며 일반적으로 매우 다른 결과를 냅니다.

XOR는 어떻게 작동합니까?

XOR(배타적 논리합)는 두 수를 비트 단위로 비교하여 대응하는 두 비트 중 정확히 하나만 1인 각 자리에서 1을 반환합니다(둘 다 1인 경우도, 둘 다 0인 경우도 아닙니다). 12 (1100) XOR 10 (1010)의 경우 각 비트 자리를 비교하면 0110이 되고, 이는 10진수로 6입니다. XOR는 비트를 토글하거나, 두 값의 차이를 검출하거나, 간단한 체크섬과 패리티 계산에 흔히 쓰입니다.

왼쪽 시프트는 무엇을 합니까?

왼쪽 시프트 (A << B)는 A의 2진 표현에 있는 모든 비트를 왼쪽으로 B자리 옮기고, 새로 비워진 하위 자리를 0으로 채웁니다. 이는 수학적으로 A에 2의 B제곱을 곱하는 것과 같습니다. 예를 들어 12 << 2 = 48이며, 이는 12 × 2² = 12 × 4 = 48과 같은 결과입니다.

비트 NOT은 무엇을 합니까?

비트 NOT (~A)은 A의 모든 비트를 반전합니다. 모든 0은 1이 되고 모든 1은 0이 됩니다. 12의 32비트 표현(00000000000000000000000000001100)에 적용하면 NOT은 그 비트들이 모두 뒤집힌 값을 만들며, 이는 부호 없는 32비트 수로는 4,294,967,283으로 표시되고 부호 있는 정수로는 2의 보수 형태로 −13을 나타냅니다(~A = −(A+1)이라는 항등식을 따릅니다).

오른쪽 시프트는 나눗셈과 어떻게 다릅니까?

음이 아닌 정수의 경우 오른쪽 시프트 (A >> B)는 2^B에 의한 정수 내림 나눗셈과 정확히 같은 결과를 냅니다: A >> B = ⌊A ÷ 2^B⌋. 예를 들어 12 >> 2 = 3이며, 이는 ⌊12 ÷ 4⌋ = 3과 일치합니다. 두 연산은 음수에서 갈라질 수 있는데, 이때는 시프트의 종류(산술 대 논리)가 부호 비트를 어떻게 처리하는지에 영향을 줍니다. 이는 저수준 프로그래밍 맥락에서 중요한 세부 사항입니다.

여기서 비트 연산은 왜 32비트 정수로 제한됩니까?

JavaScript의 내장 비트 연산자(&, |, ^, ~, <<, >>)는 ECMAScript 언어 명세에 따라 연산을 수행하기 전에 피연산자를 내부적으로 32비트 정수로 변환합니다. 이 계산기는 그 표준 동작을 그대로 따르므로 입력은 32비트로 표현 가능한 범위(여기서 허용하는 음이 아닌 값의 경우 0부터 2,147,483,647까지)로 제한됩니다.

참고 자료

  1. Warren HS Jr. Hacker's Delight. 2nd ed. Addison-Wesley, 2012. (Standard reference for bitwise algorithms and two's-complement arithmetic.)
  2. ECMA International. ECMA-262: ECMAScript Language Specification, §6.1.6.1 (Bitwise operators, ToInt32/ToUint32). ecma-international.org.
  3. Patterson DA, Hennessy JL. Computer Organization and Design: The Hardware/Software Interface. 5th ed. Morgan Kaufmann, 2013. (Binary representation and bitwise logic.)

정수론 · 전체 계산기

관련 계산기