Computer Science/Computer Archiecture

음수 표현을 위한 보수법

Hyowon_ 2025. 6. 17. 20:17
728x90
  • 2의 보수법은 음수를 0과 1만으로 표현하면서도 덧셈/뺄셈 연산을 단순하게 해주는 이진수 방식이다.
  • 보수(補數) : 어떤 수를 기준으로, 더했을 때 특정 값이 되도록 만들어진 짝수
  • 즉, "이 숫자랑 더하면 딱 기준값 되는 숫자" = 보수
  • 2의 보수법을 사용하는 컴퓨터는 "맨 앞 비트(MSB)"를 부호 판단용으로 사용한다.
    이진수  MSB  해석 방식 (2의 보수 기준)  결과
    01111111 0 양수 +127
    00000001 0 양수 +1
    10000000 1 음수 -128
    11111111 1 음수 -1
  • MSB = 0 → 양수, MSB = 1 → 음수

예시

기준값: 10

  • 3의 10의 보수는? → 7 (3 + 7 = 10)
  • 6의 10의 보수는? → 4
  • 0의 10의 보수는? → 10

2의 보수는?

  • 기준값이 2가 아니다.
    • ‘2진수에서의 보수’라는 뜻 → 즉, 기준값은 2ⁿ (4비트면 기준은 2⁴ = 16) 다시 말해, 어떤 이진수 A에 대해, A + A의 2의 보수 = 0 (모듈로 2ⁿ 기준) 되는 숫자
    구분 설명 만드는 법
    1의 보수 모든 비트를 반전 (0↔1) ~A (비트 반전)
    2의 보수 1의 보수 + 1 ~A + 1

예제1) 2의 보수로 -5 표현(8비트 기준)

1단계 : 양의 정수 5를 이진수로 바꾸기 5 → 00000101

2단계 : 1의 보수 (비트 반전) → 11111010

3단계 : 더하기 111111011

예제2) 5 + (-3) 계산하기

1단계 : 5 = 00000101

2단계 : -3 = 양수 3 = 00000011 → 1의 보수 취하기 = 11111100 → 2의 보수 11111101

3단계 : 두 수를 더하기

0 0 0 0 1 0 1
1 1 1 1 1 0 1
0 0 0 0 0 1 0

→ 정답 : 00000010

 

오버플로우(Overflow)란?

  • 컴퓨터가 표현할 수 있는 수의 범위를 넘었을 때 발생하는 현상.

예제1) 8비트 오버플로우

   0111 1111 = 127

+ 0000 0001 = 1

= 1000 0000 = -128오버플로우

  • 원인 : 정해 진 비트 수로 인해 더 큰 숫자를 담을 공간이 없어서 MSB가 뒤집어지는 현상이 발생

4비트, 16비트의 경우

예제1) 4비트

   0011 = 3

+ 1111 = -1

= 0010 → = 2

16진수, 16비트

0x란? 16진수 숫자라는 표기 방식임.

0x5 = 5

16진수 2진수 (16비트) 10진수 (2의 보수)
0x0001 0000 0000 0000 0001 +1
0xFFFF 1111 1111 1111 1111 -1
0xFFFE 1111 1111 1111 1110 -2
0x8000 1000 0000 0000 0000 -32,768
0x7FFF 0111 1111 1111 1111 +32,767

예제2) 16비트

0000 0000 0000 0011 (3)

1111 1111 1111 1101 (-3)

----------------------------

0000 0000 0000 0000 → 0

728x90