ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이진수의 음수 표현 방법: 1의 보수, 2의 보수 (two's complement)
    공부/전산|프로그래밍 2026. 4. 26. 16:20
    반응형

    이 포스트는 아래 유튜브 영상을 요약 정리한 것입니다.

    2의 보수: 이진수로 표현한 음수 - Ben Eater

     

    예를 들어, 십진수 5를 8비트 이진수로 나타내면 다음과 같습니다.

    0000 0101

    이 값을 음수(negative number)로 표현하려면 어떻게 해야 할까요? 컴퓨터에서는 이진수(binary)로 음수를 표현하는 세 가지 방법이 있습니다.

    1. 부호 비트(Sign Bit) 방식
    2. 1의 보수 (one's complement)
    3. 2의 보수 (two's complement) - 컴퓨터 표준 음수 표기법
    세 가지 표기법 모두 공통적으로 하나의 비트를 부호로 사용하기 때문에, 부호가 없는 경우와 표현 가능한 범위가 달라집니다. 예를 들어 4비트 이진수의 경우, 부호가 없으면 십진수 15까지 표현할 수 있지만 부호 비트를 사용하는 경우 -7부터 7(또는 8)까지 표현할 수 있습니다. 나타낼 수 있는 숫자 개수에는 변화가 없으나 범위가 달라지는 것입니다.

     

    부호 비트(Sign Bit) 방식

    부호 비트 방식

    가장 앞(왼쪽)의 비트를 부호로 사용하여 0이면 양수, 1이면 음수로 표현합니다. 따라서 맨 앞 비트를 제외한 나머지 비트는 해당 이진수의 절댓값을 나타냅니다.

    단점으로는 '0'이 두 개(+0과 -0) 존재하고, 음수 연산 시 수학적으로 올바르지 않은 결과가 나올 수 있다는 점이 있습니다.

    예를 들어 5(0101₍₂₎)와 -5(1101₍₂₎)를 더하면 결과가 0이 아니라 2(0010₍₂₎)가 됩니다. (4비트이므로 맨 앞 자리올림은 제외)

    부호 비트를 사용한 이진수의 연산의 경우 5와 -5를 더하면 2가 나옴 (4비트이므로 맨 앞 자리올림은 제외)

     

    1의 보수(Ones' Complement) 방식

    1의 보수 표

    모든 비트를 반전(0을 1로, 1을 0으로)하여 음수를 표현합니다.

    부호 비트 방식보다 덧셈 결과가 더 정확하지만, 여전히 '0'이 두 개 존재한다는 문제와 계산 결과가 실제 값보다 1만큼 작아지는 문제가 있습니다.

    예를 들어 5(0101₍₂₎)와 -5(1010₍₂₎)를 더하면 -0(1111₍₂₎)이 나오며, -가 붙어있긴 하나 0이므로 이는 논리적으로는 맞는 결과입니다. 그러나 5 - 3은 1이 나오고, 6 - 2는 3이 나옵니다.

    이는 각각 실제 결과보다 1씩 작습니다. (-0의 경우 -0보다 1 작은 경우 +0이 됨. 상단 1의 보수 표 참고) 

     

    부호 비트 방식과 비교하면 계산 결과가 상대적으로 더 정확하고 일관되며, 첫 번째 비트가 부호의 역할도 수행합니다. 즉, 1이면 음수, 0이면 양수인 것은 부호 비트와 동일합니다.

    부호비트와 1의 보수의 비교

     

    2의 보수(Two's Complement) 방식

    1의 보수에 1을 더하여 음수를 표현합니다. 이 방식에서는 -0이 사라지고, 그 자리를 -1이 차지하게 됩니다. 또한 -0이 사라진 대신 -8(1000₍₂₎)과 같은 값도 표현할 수 있게 됩니다.

    '0'이 하나만 존재하게 되며, 덧셈과 뺄셈이 수학적으로 자연스럽게 동작합니다. 또한 가장 앞의 비트가 음수의 가중치(2^3=8 에서 반전하면 -8)를 가진다고 생각하면 더욱 합리적인 표기법이 됩니다.

    이러한 장점 덕분에 하드웨어 구현이 용이하고 현재 컴퓨터에서 가장 널리 사용되는 방식입니다. 

    2의 보수 표

     

    계산 예제를 살펴보겠습니다.

    • 2의 보수 표기법에서 5(0101₍₂₎)와 -5(1011₍₂₎)를 더하면 (즉, 5 - 5를 하면) 결과값으로 0(0000₍₂₎)이 나옵니다.
    • 6(0110₍₂₎)과 -2(1110₍₂₎)을 더하면 4(0100₍₂₎)가 나오므로 실제 십진법의 연산과 동일한 결과가 나옵니다.

    아예 결과를 사용할 수 없는 부호 비트나 결과에서 1을 더하는 후처리를 해야 하는 1의 보수에 비하면 연산 결과가 바로 나오는 것은 분명한 장점입니다.

    2의 보수의 연산

     

    단점으로는 부호 비트 방식이나 1의 보수 방식에 비해 직관적인 반전이 어렵다는 점이 있습니다. 예를 들어 2의 보수에서 5(0101₍₂₎)의 비트를 단순히 반전하면 -5(1011₍₂₎)가 아니라 -6(1010₍₂₎)가 됩니다. 따라서 반전 후 반드시 1을 더해야 합니다.

    2의 보수의 단점: 반전이 어려움

     

    다만 컴퓨터 논리 회로에서는 이를 쉽고 효율적으로 구현할 수 있어서 문제가 되지 않는다고 합니다. 2의 보수는 구현이 매우 효율적이고 경제적이기 때문에, 현대 컴퓨터에서 음수를 표현하는 표준적인 방식으로 사용됩니다.

    반응형
Designed by Tistory.