2의 보수

방법1: 부호 절대값 표기법 방법2: 1의 보수

img_59.png

현재 부호 있는 정수를 표현하는 가장 흔한 방법은 2의 보수

2진법에서 radix complement

  • n자릿수를 가진 이진수 N의 2의 보수 =
    • 이 정의는 에서 성립함
    • 0까지 포함하려면 2의 보수를 다음과 같이 정의:

2진법에서 radix complement를 쉽게 구하는 방법:

  • diminished radix complement(1의 보수)를 구한 다음 1을 더하면 됨
    • 비트 다 뒤집고 + 1

img_60.png

0000 0000의 radix complement = 0

  • 방법 1, 방법 2와 다르게 0이 1개 0000 0001의 radix complement = -1 … 0111 1111의 radix complement = -127

이렇게 절대값을 1씩 증가하면서 구하다 보면 128은 음수만 존재함

  • 1000 0000
  • radix complement 구해도 자신과 동일한 값이 나옴
  • 음수 0이 사라지고, 표현할 수 있는 음수가 늘었음

방법 3에서는 가장 왼쪽 비트가 부호를 나타냄

  • 방법 1, 방법 2도 마찬가지

복습 퀴즈

(Q1) -1(10)을 2의 보수를 이용해서 표현한 8비트 값을 고르세요

  • 1을 8비트 2진수로 표현하면 0000_0001
  • 0000_0001의 2의 보수를 구하면 1111_1111

(Q2) 2의 보수를 사용하는 시스템에서 127을 표현한 것을 고르세요

  • 양수니까 바로 2진수 비트패턴을 구하면 0111_1111

(Q3) 다음은 2의 보수를 사용하는 시스템에서 가져온 어떤 8비트 정수입니다. 이를 10진수로 변환하면 어떤 값이 될까요? 1010 1010(2)

  • 가장 왼쪽 비트가 1이니 음수
  • 음수는 바로 10진수로 변환하기 어려우니 이 음수의 절대값을 구하기
  • 음수를 양수를 바꾸려면 2의 보수를 구하면 됨
  • 0101_0110
  • 86(10)
  • 원래 값은 -86(10)

(Q4) 다음은 2의 보수를 사용하는 시스템에서 가져온 어떤 8비트 정수입니다. 이를 10진수로 변환하면 어떤 값이 될까요? 0101 0101(2)

  • 가장 왼쪽 비트가 0이니 양수
  • 양수는 바로 10진수로 변환
  • 85(10)

(Q5) 2의 보수를 사용하는 시스템에서 4비트 짜리 정수형이 있다면 이 정수형의 표현 가능한 수의 범위는?

  • 2의 보수를 사용하는 시스템에서 가장 왼쪽의 비트는 부호를 나타냄
  • 가장 왼쪽 비트를 제외하고 000부터 111까지 양수 표현
    • 0~7
  • 0000은 2의 보수를 구해도 0000으로 2의 보수를 사용하는 시스템에서 0은 1개임을 확인
  • 001부터 111까지 대응하는 음수를 구하면 111~001
    • [1111,1001]
    • [-1,-7]
  • 마지막으로 남는 1000은 -7에서 1을 뺀 값으로 -8
  • 최종 표현 가능한 수 범위는 [-8,7]

0건의 항목