본문으로 건너뛰기

2진수 계산기

두 2진수를 입력하면 합, 차, 곱 또는 몫을 얻을 수 있습니다. 자리올림, 자리빌림, 부분곱, 긴 나눗셈 단계가 열마다 펼쳐집니다. 비트 연산 모드로 바꾸면 4~128비트에서 AND, OR, XOR, NOT, 시프트, 회전을 적용할 수 있습니다. 무료이며 회원가입이 필요 없고, 아무것도 브라우저 밖으로 나가지 않습니다.

연산 종류

2진수 숫자만 사용하며, 앞에 마이너스 기호를 붙일 수 있습니다. 공백과 밑줄은 무시되므로 1011 0110도 입력할 수 있습니다.

결과

1 0010

2진수

18

10진수

12

16진수

22

8진수

5비트

길이

과정

자리올림이 있는 열 덧셈
행43210
들어오는 올림11010
A01101
B00101
합10010

2진수 계산기 사용 방법

  1. 1. 연산 종류를 고르세요. 산술은 덧셈, 뺄셈, 곱셈, 나눗셈을 합니다. 비트 연산은 고정 폭 패턴의 개별 비트에 작용합니다.
  2. 2. 숫자를 입력하세요. 0과 1만 사용하세요. 앞의 마이너스 기호, 0b 접두사, 공백과 밑줄은 모두 괜찮으므로 1011 0110은 하나의 수로 읽힙니다.
  3. 3. 폭을 고르세요 (비트 연산에만). NOT, 시프트, 회전은 폭이 없으면 의미가 없으므로 계산기가 폭을 묻습니다: 4, 8, 16, 32, 64 또는 128비트.
  4. 4. 결과와 과정을 읽으세요. 답은 2진수, 10진수, 16진수, 8진수로 나타나며, 그 아래에 열 단위 과정이 있습니다.

2진 덧셈의 원리

2진 덧셈은 10진 덧셈과 같은 열 규칙을 따르지만, 열은 10이 아니라 2에서 넘칩니다. 각 열의 두 비트와 오른쪽에서 넘어온 자리올림을 더하세요. 합이 0 또는 1이면 그대로 씁니다. 합이 2 또는 3이면 낮은 자리 비트(0 또는 1)를 쓰고 다음 열로 1을 올립니다.

한 열의 네 가지 경우
열의 합쓰는 비트올림
0 + 0 + 0 = 000
1 + 0 + 0 = 110
1 + 1 + 0 = 10 (2)01
1 + 1 + 1 = 11 (3)11

1101(13)과 101(5)을 더해 봅시다. 계산기는 두 수를 다섯 열로 맞추고, 각 열로 들어가는 올림을 보여 줍니다. 왼쪽에서 오른쪽으로 11010이 되고, 결과는 10010, 즉 18입니다. 올림 행은 손으로 더할 때 사람들이 가장 자주 놓치는 부분입니다.

뺄셈, 곱셈, 나눗셈

뺄셈은 반대 방향으로 작동합니다. 한 열이 1 − 1 − 1 또는 0 − 1을 해야 하면 왼쪽 열에서 1을 빌려 옵니다. 이 열에서 그 1은 2의 값을 가집니다. 1000 − 0011에서는 빌림이 세 열을 거쳐 전파되어 0101(8 − 3 = 5)이 됩니다. A가 B보다 작으면 계산기는 작은 수에서 큰 수를 빼고 결과에 마이너스 기호를 붙입니다.

곱셈은 시프트하고 더하기입니다. 곱하는 수의 각 1은 피곱수를 그 비트 위치만큼 왼쪽으로 민 복사본을 기여하고, 0은 아무것도 기여하지 않습니다. 1011 × 101(11 × 5)에서 1은 위치 0과 2에 있으므로 부분곱은 1011과 101100이며, 그 합은 110111, 즉 55입니다.

나눗셈은 추측 단계가 아주 쉬운 긴 나눗셈입니다. 피제수의 비트를 한 번에 하나씩 내립니다. 나누는 수가 현재 값에 들어가면 빼고 몫에 1을 씁니다. 들어가지 않으면 0을 씁니다. 1100100 ÷ 111(100 ÷ 7)은 몫 1110(14)과 나머지 10(2)을 줍니다. 음수 피연산자에서는 몫이 0을 향해 잘리고, 나머지는 A의 부호를 따릅니다 — C, Java, JavaScript의 관례입니다.

선택한 폭에서의 비트 연산

두 입력에 대한 비트 연산
ABANDORXORNANDNORXNOR
00000111
01011100
10011100
11110001

4비트에서 1100과 1010을 쓰면 AND는 1000, OR은 1110, XOR은 0110입니다. NOT은 폭 안의 모든 비트를 뒤집으므로, 같은 1100은 4비트에서는 0011이 되지만 8비트에서는 11110011이 됩니다. 폭이 중요한 이유입니다.

왼쪽 시프트 n은 모든 비트를 n칸 위로 옮기고 빈자리를 0으로 채웁니다. 위로 밀려 나간 비트는 사라지며, 계산기가 그 비트들을 나열합니다. 논리 오른쪽 시프트는 0으로 채웁니다. 산술 오른쪽 시프트는 최상위 비트를 복사하므로 음수는 음수로 남습니다. 10110110을 2칸 오른쪽으로 시프트하면 논리적으로는 00101101이지만, 산술적으로는 11101101(−19)입니다. 회전은 한쪽 끝에서 떨어져 나가는 비트를 반대쪽에 다시 감싸므로 아무것도 잃지 않습니다.

산술 모드에는 오버플로가 없습니다

여기서 산술은 길이와 관계없이 정확합니다. 그래서 11111111 + 1은 0이 아니라 100000000입니다. 실제 하드웨어는 고정된 비트 수를 유지하고 값을 되돌려 감습니다. 그런 동작과 그에 따른 부호 있는 범위를 보려면 2의 보수 계산기를 사용하세요.

흔한 실수

  • 가장 왼쪽 열로 들어가는 올림을 잊기. 두 8비트 수를 더하면 9비트 답이 나올 수 있습니다. 계산기는 그 추가 열을 유지합니다.
  • 논리 오른쪽 시프트와 산술 오른쪽 시프트를 혼동하기. 양수에서는 같고, 최상위 비트가 1인 패턴에서는 다릅니다. 언어마다 다릅니다: Java의 >>는 산술이고 >>>는 논리이며, C는 음의 부호 있는 값에 대한 >>를 컴파일러에 맡기고, 주요 컴파일러는 산술로 처리합니다.
  • 비트 패턴을 실수로 부호 있는 수로 읽기. 11110011은 부호 없는 수로 243이고, 2의 보수로는 −13입니다. 비트 연산 결과는 두 값을 모두 보여 주므로 원하는 값을 구분할 수 있습니다.
  • NOT이 폭과 무관하다고 가정하기. 무한 정수에서 12의 NOT은 −13입니다. 고정 폭 안에서는 보수 패턴이며, 이 계산기가 돌려주는 값이 그것입니다.

자주 묻는 질문

2진수는 어떻게 더하나요?
가장 오른쪽 열부터 왼쪽으로, 두 비트와 자리올림을 더하세요. 열의 합이 0 또는 1이면 그대로 쓰고, 2이면 0을 쓰고 1을 올리며, 3이면 1을 쓰고 1을 올립니다. 예를 들어 1101 + 101 = 10010입니다. 계산기는 모든 열로 들어가는 올림을 보여 줍니다.
2진수는 어떻게 빼나요?
오른쪽부터 열 단위로 뺍니다. 한 열이 0보다 작아지면 왼쪽 다음 열에서 1을 빌려 오는데, 이는 현재 열에 2를 더하는 것입니다. 두 번째 수가 더 크면 반대 순서로 빼고 답에 마이너스 기호를 붙이세요. 1000 − 11 = 101(8 − 3 = 5).
논리 오른쪽 시프트와 산술 오른쪽 시프트의 차이는 무엇인가요?
논리 오른쪽 시프트는 비워진 최상위 비트를 0으로 채우므로, 패턴을 부호 없는 수로 취급합니다. 산술 오른쪽 시프트는 원래 최상위 비트를 복사하므로, 음수인 2의 보수 수는 음수로 남습니다. 둘 다 값을 절반으로 줄이지만, 음수 값을 내림(아래쪽 반올림)으로 올바르게 나누는 것은 산술 시프트뿐입니다.
AND, OR, XOR는 무엇을 하나요?
두 비트 패턴을 열 단위로 비교합니다. AND는 두 비트가 모두 1일 때만 1을, OR은 적어도 하나가 1일 때 1을, XOR은 정확히 하나만 1일 때 1을 줍니다. AND는 비트를 가리는 데, OR은 비트를 설정하는 데, XOR은 비트를 뒤집거나 차이를 비교하는 데 쓰입니다.
이 계산기는 음의 2진수를 다룰 수 있나요?
산술 모드에서는 가능합니다. 앞에 마이너스 기호를 붙이면 부호 규칙이 정확한 결과에 적용됩니다. 비트 연산 모드는 대신 평범한 비트 패턴을 받습니다. 음수의 패턴은 폭에 따라 달라지기 때문입니다. 음수 값의 패턴을 찾으려면 2의 보수 계산기를 사용하세요.
얼마나 큰 2진수를 입력할 수 있나요?
고정된 제한은 없습니다. 연산이 임의 정밀도 정수를 사용하기 때문입니다. 열 과정은 64비트까지의 피연산자에 대해 그려지며, 그보다 길어도 정확한 결과는 얻지만 단계 표는 나오지 않습니다. 비트 연산은 선택한 폭, 최대 128비트로 제한됩니다.

관련 도구

데이터·마크업·코드의 다른 도구