본문 바로가기

컴퓨터 기초/이산 수학

신흥철 교수의 이산 수학 9, 10강: 수의 체계, 보수

3. 보수의 표현

  • 1의 보수(1` complement) 표현

    • 어떤 수 n과의 합이 1이 되는 수 (각 자리가 합해서 1이 되는 수)

      • 예 : 2진수 0011010의 1의 보수 = 11001010
      • 10 진수에서는 9의 보수와 유사하다
  • 2의 보수(2` complement) 표현

    • 어떤 수 n과의 합이 2가 되는수

      • 예 : 2진수00110101의 2의 보수 = 11001011
      • 요령 : 원래의 수에서 처음 1이 나오는 수 밑으로는 0, 1이 나온 수의 자리는 1, 위의 자리들은 1의 보수 처리
      • 10진수에서 10의 보수는 9의 보수 + 1
  • 부호화 - 절대치 표현

    • 부호와 데이터의 절댓값을 그대로 표현

      최상위 비트 ... 최하위비트
      부호 비트 절대치 비트(데이터 비트)
    • (예제) 10진수 +53과 -53에 대하여 8bit 부호화-절대치 표현으로 나타내시오. +5310 = 001101012. -5310 = 101101012

  • 1의 보수 / 2의 보수 표현에 대한 특징

    • 공통점

      • 음수 표현에만 적용
      • 음수에 대한 부호화-절대치 표현에서 부호 비트는 그대로 사용
    • 차이점 : 음수에 대한 부호화 - 절대치 표현에서 절대치(데이터 비트)에 대해

      • 1의 보수(0은 1로, 1은 0으로)로 바꿈
      • 2의 보수(1보수에 1을 더함)로 바꿈
    • (예제) +53과 -53 8bit 1의 보수/2의 보수 표현

      (1) +53은 부호화-절대치 표현과 동일 (∵양수) ∴ 00110101 (2) -53은 부호 비트를 제외한 7bit 데이터 비트는 01101012이므로 1의 보수 표현 : 11001010 2의 보수 표현 : 11001011

  • 데이터의 범위

    • n비트를 사용하는 컴퓨터에서

      • 1의 보수 : -(2n-1-1) ~ (2n-1-1) - 사용할 수 있는 비트 개수는 n-1 이며 이므로 절대값들의 표현 범위는 0~2n-1-1이다. (표현할 수 있는 비트 개수가 k일 때 표현할 수 있는 수의 범위 0 ~ 2k-1) 0이 두개라는 특징이 있으며 제일 작은수와 제일 큰수가 대칭된다.
      (-0) 1111 (-1) 1110 (-2) 1101 (-3) 1100 (-4) 1011 (-5) 1010 (-6) 1001 (-7) 1000
      (0) 0000 (1) 0001 (2) 0010 (3) 0011 (4) 0100 (5) 0101 (6) 0110 (7) 0111
      • 2의 보수 : -2n-1 ~ (2n-1-1) - 2의 보수로는 1의 보수보다 절댓값이 하나더 큰 수를 표현할 수가 있다. 따라서 2의 보수로 표현되는 음수는 0부터 시작하지 않고 1부터 시작하여 -2n-1까지 표현할 수 있는 것이다. 이렇게 하면 0도 두 개가 아니고 1의 보수보다 하나 더 많은 범위를 표현할 수가 있다.
      (-1) 1111 (-2) 1110 (-3) 1101 (-4) 1100 (-5) 1011 (-6) 1010 (-7) 1001 (-8) 1000
      (0) 0000 (1) 0001 (2) 0010 (3) 0011 (4) 0100 (5) 0101 (6) 0110 (7) 0111
  • 부호화-절대치 표현의 한계

    • 연산 결과가 데이터의 범위를 벗어나는 경우를 초과(overflow)라고 하며 다음 2가지 경우에 발생

      ① 두 개의 양수를 더했을 때 음수가 나오는 경우 : 부호화 비트가 0 -> 1

      ② 두 개의 음수를 더했을 때 양수가 나오는 경우 : 부호화 비트가 1 -> 0

    • (예) 4bit 부호화-절대치 표현에서

      ① 410+510 = 01002+01012=10012 = -110≠910

      ② (-3)+(-4) = 1011+1100=10111 = 7≠-7

  • 보수 표현을 사용하는 이유

    • 부호화 - 절대치 표현의 한계

      • 연산의 결과가 부정확 : 초과 발생시

        • 예 : 4bit 에서 연산 : 4 + 5, (-3) + (-4)

        • 0에 대한 2가지 표현

        • 뺄셈을 덧셈으로 바꿔 올바른 값을 도출해내기 위해

          (예제) 5 - 3 = 5 + (3에 대한 10의 보수) = 5 + 7 = 2

    • 1의 보수 표현의 한계

      • 연산의 정확성 : 양수와 음수를 더했을 때 초과가 발생하여 원래 값보다 1이 작은 수가 나온다.

      • 0에 대한 2가지 표현 : 0000(+0), 1111(-0)

    • 2의 보수 표현에서 이의 2가지 문제 모두 해결

      • 연산의 정확성, 0에 대한 유일한 표현

    • 1의 보수(2의 보수)를 10진수로 변환하는 방법

      • -(2n-1-1)(-2 n-1)+절대치 비트의 10진수 표현

      • 1의 보수(2의 보수)를 다시 1의 보수(2의 보수)로 변환한 후 이에 대해 10진수 표현

      • [예제] 4bit 컴퓨터에서 다음을 10진수로 변환

        • 1의 보수 1010: ① -(24-1-1)+(1×21)=-5 (제일 작은 수에서 차이를 더하기)

          ((1000) + (0010) =.1010 )

          ② 11012=-(1×22+1×20)=-5

        • 2의 보수 1011: ① -(24-1)+(1×21+1×20)=-5 (제일 작은 수에서 차이를 더하기)

          ((1000) + (0011) = 1011)

          ② 11012=-(1×22+1×20)=-5

           

     


4. 보수의 연산

  • 문제가 생기지 않는 경우

    (예제) 4bit 컴퓨터에서 210-410에 대해 1의 보수와 2의 보수를 이용하여 연산하시오. |210|= 0010, |410|= 0100

    • 1의 보수 이용: 0010 + 1101(4에 대한 1의 보수) = 1101 → 1010= -210 = 2 + (-4) = 2 + (9 - 4) - 9

    • 2의 보수 이용: 0010 + 1110(4에 대한 2의 보수) = 11102 → 1010 = -210

      = 2 + (-4) = 2 + (10 - 4) - 10

  • 초과가 발생하여 문제가 생기는 경우

    (예제) 4bit 컴퓨터에서 410-210에 대해 1의 보수와 2의 보수를 이용하여 연산하시오.

    |410|= 0100, |210|= 0010

    • 1의 보수 이용: 0100 + 1101 = 10001 10001 + 1 = 01002 = 210

      = 4 + (-2) = 4 + (9 - 2) - 10 + 1

    • 2의 보수 이용: 0100 + 1110 = 00102=210

      = 4 + (-2) = 4 + (10 - 2) - 10

    • 왜 이렇게 1의 보수에서는 1을 더해야하는 가? 초과된 자릿수를 뺴주면, 기수보다 1 적은 수만이 남기 때문이다.

  • 초과가 발생하여 문제가 생기는 경우 2 (예제) 4bit 컴퓨터에서 -210-410에 대해 1의 보수와 2의 보수를 이용하여 연산하시오 |210|= 0010, |410|= 0100

    • 1의 보수 이용: 1101 + 1011 = 11000 11000 + 1 = 10012 → 1110 = -610

      (-2) + (-4) = (9 - 2) + (9 - 4) - 10 + 1 =

    • 2의 보수 이용: 1110 + 1100 = 10102 → 1110 = -610