비트 연산 계산기

두 8·16·32·64비트 정수에 AND·OR·XOR·NAND·NOR·XNOR·NOT·시프트·회전을 적용하고 결과를 10진수·16진수·8진수·2진수로 보여줍니다.

A와 B는 32비트 정수로, -2,147,483,648부터 4,294,967,295까지 받습니다. 2,147,483,648부터는 비트 패턴으로 읽으므로 4294967295와 -1은 같은 32비트입니다.

비트 — 눌러서 하나씩 뒤집기
A의 비트
B의 비트
부호 있는 10진수 8
16진수 0x00000008
8진수 0o00000000010
2진수
0000 0000 0000 0000 0000 0000 0000 1000

켜진 비트 1/32개 · 패리티 홀수 · 가장 높은 켜진 비트 3 · 가장 낮은 켜진 비트 3

16진수·8진수·2진수는 부호 없는 32비트 값으로 표시됩니다.

이 비트 연산 계산기의 기능

두 정수를 10진수(예: 255), 16진수(0xFF), 8진수(0o755), 2진수(0b1010)로 입력하고 연산과 비트 폭(8·16·32·64비트)을 선택하면 결과를 10진수, 16진수, 8진수, 2진수로 즉시 확인할 수 있습니다. AND, OR, XOR, NAND, NOR, XNOR, NOT(A에 대한 단항 연산), 왼쪽 시프트(A << B), 산술 오른쪽 시프트(A >> B), 논리 오른쪽 시프트(A >>> B), 왼쪽 회전(ROL), 오른쪽 회전(ROR)을 지원합니다. JavaScript에는 회전 연산자가 없습니다. B번 비트 켜기·끄기·뒤집기·확인은 A에서 B번 자리의 비트만 다루고, A의 비트를 버튼으로 펼쳐 눌러서 뒤집을 수도 있습니다. 2진수 답 아래 줄에는 결과에서 켜진 비트 수와 그 수가 짝수인지 홀수인지(패리티), 가장 높은·가장 낮은 켜진 비트의 자리가 나오며(결과가 0이면 없음), 부호 없는 패턴으로 읽으므로 -1은 모든 비트가 켜진 것으로 셉니다. 모든 값은 고른 폭의 2의 보수 정수로 처리됩니다. 기본값인 32비트는 JavaScript 비트 연산자의 폭이자 C 등 대부분의 시스템 언어에서 int의 폭이며, 계산은 BigInt로 하므로 64비트 값도 JavaScript의 Number가 반올림하기 시작하는 2^53을 넘는 자리까지 정확합니다. A와 B는 그 폭의 가장 작은 부호 있는 값부터 가장 큰 부호 없는 값까지 받고(32비트에서는 -2,147,483,648부터 4,294,967,295까지), 그 밖의 값은 조용히 잘라내지 않고 거부합니다.

부호 있는 수, 부호 없는 수, 2의 보수

첫 10진수 줄은 언제나 부호 있는 값이므로 32비트에서 NOT 0은 -1이고 -1 >>> 0도 -1이며, 최상위 비트가 켜져 있으면 부호 없는 값 4294967295가 별도 줄에 함께 표시됩니다. 16진수·8진수·2진수 출력은 고른 폭의 부호 없는 패턴으로 표시되며, 그래서 32비트에서 -1이 0xFFFFFFFF, 0o37777777777, 전체 1의 2진수로 나타납니다. 산술 오른쪽 시프트는 부호 비트를 복사하고 논리 오른쪽 시프트는 0으로 채웁니다. 이 차이는 흔한 버그의 원인이며, 여기서 두 결과를 나란히 비교할 수 있습니다. B 입력 아래 줄은 고른 시프트·회전·비트 연산이 무엇을 하는지 알려 줍니다.

자주 묻는 질문

>> 와 >>> 의 차이는 무엇인가요?

A >> B는 부호 비트를 유지하는 산술 오른쪽 시프트로 음수는 계속 음수로 남습니다. A >>> B는 비워진 상위 비트를 0으로 채우는 논리 오른쪽 시프트로, 1 이상 이동하면 부호 비트가 켜지지 않습니다. 첫 10진수 줄은 언제나 결과의 부호 있는 값이고, 최상위 비트(32비트에서는 31번 비트)가 켜져 있으면 부호 없는 10진수 줄에 부호 없는 값도 나오므로 -1 >>> 0은 -1과 4294967295로 읽힙니다.

비트 회전이나 NAND·NOR·XNOR도 되나요?

됩니다. 왼쪽 회전(ROL)과 오른쪽 회전(ROR)은 고른 폭 밖으로 밀려난 비트를 반대쪽 끝으로 돌려 넣습니다. 횟수는 0부터 폭보다 하나 작은 수까지(32비트에서는 0부터 31까지) 받습니다. NAND·NOR·XNOR도 같은 목록에 있고 각각 기본 게이트를 부정한 값이므로 ~(A & B)를 두 단계로 나눌 필요가 없습니다.

16진수·8진수·2진수 값도 입력할 수 있나요?

네. 10진수(예: 42), 0x 접두사를 붙인 16진수(0x2A), 0o 접두사를 붙인 8진수(0o755 — 파일 권한을 적는 그 표기), 0b 접두사를 붙인 2진수(0b101010)로 입력할 수 있습니다. -5나 -0x10처럼 앞에 마이너스 기호를 붙일 수도 있습니다.

비트를 눌러 뒤집거나, 특정 비트를 켜고 끄고 확인할 수 있나요?

네. 비트 — 눌러서 하나씩 뒤집기를 펼치면 A의 모든 비트가 높은 자리부터 토글 버튼으로 나오고, B가 횟수나 비트 위치가 아니라 피연산자일 때는 B의 비트도 나옵니다. 버튼을 누르면 그 비트가 뒤집히고 값은 입력한 표기 그대로 다시 쓰여, 16진수로 넣은 값은 16진수로 남습니다. 연산 목록에는 B번 비트 켜기·B번 비트 끄기·B번 비트 뒤집기·B번 비트 확인도 있어 A에서 가장 낮은 자리부터 센 B번 비트만 다루며, B는 시프트 횟수와 같은 범위를 받습니다.

결과에서 켜진 비트 수도 세어 주나요?

네. 2진수 답 아래 줄에 결과에서 켜진 비트 수와 그 수가 짝수인지 홀수인지(패리티), 가장 낮은 자리부터 센 가장 높은·가장 낮은 켜진 비트의 자리가 나옵니다. 결과가 0이면 켜진 비트가 없어 두 자리 모두 없음으로 표시됩니다. 부호 없는 패턴으로 읽으므로 -1 같은 음수 결과는 모든 비트가 켜진 것으로 셉니다.

8·16·64비트로도 계산할 수 있나요?

네. 비트 폭 선택에서 8·16·32·64비트를 고를 수 있고 처음에는 32비트로 열립니다. 모든 연산과 A·B가 받는 범위, 비트 버튼, 켜진 비트 수가 그 폭을 따르므로 8비트에서는 -8이 0xF8이고 NOT 0은 부호 없이 255이며, 64비트 값도 모든 자리가 그대로 유지됩니다. 계산을 JavaScript의 32비트 연산자가 아니라 BigInt로 하기 때문입니다.