2의 보수 계산기 (부호 있는 정수 2진수 변환)
부호 있는 10진수를 8/16/32/64비트의 2의 보수 2진수 패턴으로 변환하거나, 그 반대로 변환합니다. 부호 없는 정수로의 해석, 16진수 표기도 함께 표시하며 범위를 벗어난 값도 감지합니다.
2의 보수란 무엇인가요
2의 보수는 컴퓨터가 양수와 음수를 모두 나타낼 수 있는 부호 있는 정수를 순수한 비트 패턴으로 표현하기 위한 방식입니다. 양수는 그대로 일반 2진수로 저장되고, 음수는 절댓값의 모든 비트를 반전한 뒤 1을 더해서 만들어집니다. 최상위 비트(MSB)가 부호 역할도 함께 맡아 1이면 음수, 0이면 양수를 나타내며, 표현 가능한 범위는 선택한 비트 폭(8, 16, 32, 64비트)에 따라 정해집니다.
이 도구는 부호 있는 10진수를 선택한 비트 폭의 2의 보수 2진수 패턴으로 변환하며, 반대로 2진수 문자열을 다시 10진수로 변환할 수도 있습니다. 주요 결과와 함께 같은 비트를 부호 없는 값으로 해석했을 때의 값, 16진수 표기, 부호-크기 표현과의 비교도 함께 표시하므로, 같은 비트 패턴이 해석 방식에 따라 어떻게 다른 값을 의미하는지 구체적으로 확인할 수 있습니다.
2의 보수 계산기 사용법
- 비트 폭을 선택합니다 확인하려는 정수 타입에 맞춰 8, 16, 32, 64비트 중에서 선택합니다.
- 변환 방향을 선택합니다 필요에 따라 "10진수 → 2진수"와 "2진수 → 10진수" 중 원하는 방향으로 전환합니다.
- 값을 입력합니다 부호 있는 10진수(예: -5) 또는 2진수 비트 문자열(예: 11111011)을 입력합니다.
- 변환 결과를 확인합니다 부호 있는/없는 10진수 값, 2의 보수 비트 패턴, 16진수 표기가 함께 표시됩니다.
- 범위·오버플로우 경고를 확인합니다 비트 폭이 담을 수 없는 값을 입력하면 오버플로우 경계가 정확히 어디인지 확인할 수 있습니다.
더 잘 활용하기 위한 팁
- 8비트 부호 있는 정수의 범위는 -128~127입니다. 127을 입력한 뒤 128을 입력해 보면 오버플로우 경계를 확인할 수 있습니다. 128은 범위를 벗어나 오류가 발생하는데, 바로 그 지점이 -128로 되돌아가는(랩어라운드) 경계입니다.
- "부호 없는 10진수" 행은 최상위 비트를 부호로 취급하지 않고 같은 비트 패턴을 그대로 읽은 값입니다. 부호 있는 행과 비교하면 두 해석 방식의 차이를 바로 확인할 수 있습니다.
- 2진수 입력은 선택한 비트 폭과 정확히 같은 자릿수여야 합니다. 8비트라면 8자리, 16비트라면 16자리를 정확히 입력하세요.
- 64비트 계산은 JavaScript의 Number 타입 대신 내부적으로 BigInt를 사용하므로, 2^63에 가까운 값도 오차 없이 변환됩니다.
- 이 도구는 C나 Java 같은 언어의 정수 오버플로우 동작을 이해하는 데도 유용합니다. int(32비트)·long(64비트) 타입은 바로 이 경계에서 값이 되돌아갑니다.
2의 보수 계산의 활용 사례
컴퓨터공학 수업·시험 대비
거의 모든 컴퓨터공학 입문 수업에 등장하는 2진수 변환 문제를 직접 손으로 풀어보고 답을 검산할 수 있습니다.
C 언어·임베디드 개발에서 정수 오버플로우 디버깅
int나 uint8_t 변수에서 발생한 예상치 못한 값을 실제 비트 폭으로 재현해 원인을 정확히 찾아낼 수 있습니다.
CPU 레지스터 내부 표현 이해
디버거에서 레지스터의 16진수 값을 봤을 때, 그것이 부호 있는 값으로 실제 어떤 수를 의미하는지 바로 확인할 수 있습니다.
비트 연산 결과 검증
AND·OR·시프트 연산 코드를 작성하기 전후로, 예상한 비트 패턴이 맞는지 직접 대조해 확인할 수 있습니다.
2의 보수 관련 용어집
- 2의 보수(Two's Complement)
- 절댓값의 모든 비트를 반전한 뒤 1을 더해 음수를 표현하는 방식입니다. 0에 대한 비트 패턴이 하나뿐이며 같은 덧셈 회로를 뺄셈에도 그대로 쓸 수 있어, 현대 CPU 대부분이 부호 있는 정수 표현에 사용합니다.
- 부호 비트(Sign Bit)
- 비트 패턴의 최상위 비트(MSB)를 말합니다. 2의 보수 표현에서 이 값이 1이면 음수, 0이면 양수를 나타냅니다.
- 오버플로우(Overflow)
- 연산 결과가 해당 비트 폭으로 표현할 수 있는 범위를 벗어나는 현상입니다. 상위 비트가 잘려나가면서 부호 비트의 의미가 바뀌어, 값이 범위의 반대쪽으로 넘어간 것처럼 보이게 됩니다.
- 부호 있는 정수·부호 없는 정수(Signed / Unsigned Integer)
- 같은 비트 패턴이라도 부호 비트를 음수 표시로 취급하는지(부호 있는), 단순한 값 비트로 취급하는지(부호 없는)에 따라 해석되는 값이 달라집니다.
- 비트 폭(Bit Width)
- 정수를 저장하는 데 사용하는 비트 수입니다. 8, 16, 32, 64비트가 대표적이며, 폭이 넓을수록 표현할 수 있는 값의 범위도 넓어집니다.
- 1의 보수(One's Complement)
- 양수의 모든 비트를 반전시키기만 해서 음수를 만드는 이전 방식입니다. "+0"과 "-0" 두 가지 비트 패턴이 생기는 단점이 있으며, 이를 해결하기 위해 2의 보수가 널리 쓰이게 되었습니다.
자주 묻는 질문
여담 ― 컴퓨터가 2의 보수를 사용하는 이유
2진수로 음수를 표현하는 방법이 2의 보수만 있는 것은 아닙니다. 역사적으로는 최상위 비트를 단순히 부호 표시로만 쓰는 "부호-크기 표현"과, 양수의 비트를 그대로 반전시키기만 하는 "1의 보수 표현"도 사용되었습니다. 그러나 두 방식 모두 공통된 결함이 있습니다. 0을 나타내는 비트 패턴이 "+0"과 "-0" 두 가지로 존재하게 되어 비교 연산과 회로 설계가 복잡해지는 것입니다. 2의 보수 표현에서는 이 "두 개의 0 문제"가 발생하지 않으며, 비트 패턴과 정수값이 정확히 1대1로 대응합니다.
2의 보수의 더 큰 장점은 덧셈에 사용하는 회로를 그대로 뺄셈에도 쓸 수 있다는 점입니다. 어떤 수를 빼는 것은 그 수의 2의 보수를 더하는 것과 같기 때문입니다. CPU는 값이 양수인지 음수인지 신경 쓸 필요 없이 단순히 비트 패턴끼리 더하기만 하면 항상 올바른 결과를 얻습니다. 이 덕분에 산술논리연산장치(ALU)는 별도의 뺄셈 전용 회로를 둘 필요가 없어져 구조가 단순해지며, 이것이 현대의 거의 모든 CPU 아키텍처가 부호 있는 정수 표현 방식으로 2의 보수를 채택한 이유입니다.
정수 오버플로우 현상도 이 표현 방식의 직접적인 결과입니다. 8비트 부호 있는 최댓값 127(01111111)에 1을 더하면 비트 패턴은 단순히 10000000으로 올라가는데, 이를 부호 있는 값으로 해석하면 -128이 됩니다. C 언어에서 부호 있는 정수의 오버플로우는 기술적으로 "정의되지 않은 동작"으로 취급되어, 컴파일러 최적화에 따라 이 경계 근처에서 예기치 않은 결과가 나올 수 있으므로 실제 코드에서는 각별한 주의가 필요합니다. 반면 Java는 오버플로우가 조용히 랩어라운드된다고 명시적으로 규정하고 있어, 동일한 비트 표현이라도 언어에 따라 동작 보장 수준이 크게 다를 수 있다는 흥미로운 사례를 보여줍니다.