본문으로 건너뛰기
AZ Tools

비트 연산 계산기

두 정수에 대한 AND·OR·XOR·NOT·시프트 연산을 2진수·16진수·부호 없는/있는 10진수로 한눈에. 8·16·32·64비트 폭 선택.

10진수, 0x 16진수, 0b 2진수, 0o 8진수 입력 가능(음수 허용).

식2진수16진수10진수부호 있음
A0000 11000x0C1212
B0000 10100x0A1010
A & B0000 10000x0888
A | B0000 11100x0E1414
A ^ B0000 01100x0666
~A1111 00110xF3243-13
~B1111 01010xF5245-11
A << 10001 10000x182424
A >> 10000 01100x0666

사용법

  1. A와 B에 두 정수를 입력합니다(10진수 또는 0x / 0b / 0o 접두어).
  2. 비트 폭과 시프트 양을 고릅니다.
  3. 각 연산을 2진수·16진수·부호 없는/있는 열에서 확인합니다.

자세한 설명

펼치기

두 정수를 입력하면 자주 쓰는 비트 연산을 한 번에 보여줍니다: AND, OR, XOR, NOT(~A, ~B), 그리고 임의 자릿수의 좌/우 시프트입니다. 각 결과는 2진수(니블 단위로 묶음), 16진수, 부호 없는 10진수, 2의 보수 부호 있는 10진수로 표시됩니다. 8·16·32·64비트 폭을 고르면 결과가 그 크기로 래핑되어, NOT과 시프트가 C·Rust나 레지스터에서와 똑같이 동작합니다. 입력은 10진수, 0x 16진수, 0b 2진수, 0o 8진수를 받으며 음수는 2의 보수로 해석됩니다. 임의 정밀도 정수로 계산해 64비트 값도 정확합니다. 임베디드 작업, 비트 플래그·마스크, 프로토콜 디코딩, 비트 연산 학습에 유용합니다.

자주 묻는 질문

음수는 어떻게 처리되나요?

선택한 폭의 2의 보수로 해석됩니다. 예를 들어 −1은 모두 1(8비트에서 0xFF)이 됩니다. 부호 있는 열은 모든 결과의 2의 보수 값을 보여줍니다.

비트 폭은 무엇을 바꾸나요?

결과를 그 비트 수로 마스킹하며, 이는 NOT과 시프트에서 중요합니다. ~12는 8비트에서 0xF3, 32비트에서 0xFFFFFFF3 입니다 — C의 고정 크기 정수나 CPU 레지스터와 같습니다.

16진수나 2진수도 입력되나요?

네 — 16진수는 0x(0xFF), 2진수는 0b(0b1010), 8진수는 0o 접두어를 쓰면 됩니다. 일반 10진수도 됩니다.

64비트 결과도 정확한가요?

네. 내부적으로 임의 정밀도 정수를 사용하므로, 32비트 JavaScript 비트 연산자와 달리 64비트 연산에서 정밀도를 잃지 않습니다.

오른쪽 시프트는 산술인가요, 논리인가요?

논리 시프트입니다. 부호 없는 비트 패턴을 밀기 때문에 왼쪽에서 0이 들어오고 부호 비트는 보존되지 않습니다. 8비트에서 A = −1은 0xFF이고 A >> 1은 0x7F, 십진수로 127이며 −1이 아닙니다. 이는 자바스크립트의 >>>, 자바의 >>>와 같고 각 언어의 >>와는 다릅니다. C가 부호 있는 정수에 해 주는 산술 시프트가 필요하다면 절댓값을 밀고 부호를 다시 붙이거나, 부호 있는 열을 그 점을 감안해 읽으세요.

왼쪽 시프트 결과가 자바스크립트 콘솔과 다른 이유는?

자바스크립트의 <<는 값과 무관하게 피연산자를 항상 32비트로 자르기 때문입니다. 그래서 1 << 40은 256이 됩니다. 40이 8로 감기는 것이죠. 여기서는 임의 정밀도 정수로 시프트한 다음 선택한 폭으로 마스킹하므로, 64비트에서 1 << 40은 1099511627776이고 이는 C가 uint64_t에 대해 주는 값과 같습니다. 폭 이상으로 시프트하는 것은 여기서 0을 내도록 정의되어 있는데, C에서는 그것이 미정의 동작입니다. 시프트 입력값은 0~64로 제한됩니다.

관련 도구