1의 보수 계산

(-7) + 2 = (-5)를 한번 해보자.

  1000(7=0111, 1의 보수를 취하면 1000)

+0010(2)

----------

1010(-5?)

맞는거 같은데 좀 이상하다. 왜지? 1010에 1의 보수를 취하면 0101=5 가 나온다.

분명 1의 보수에서는 +1을 해주어야 정확한 값이 나오는데, 이 같은 상황은 안 해주어도 답이 나온다.

이는 반례를 들어서 알아보자.

 

ex1) 7 + (-2) = 5 를 한번 해보자.

  0111(7)

+1101(2=0010, 1의 보수를 취하면 1101)

-----------

10100(오버플로우, 즉 4비트만 쓰니까 0100으로 간주한다.)

이 같은 경우는 0100=4 라는 결과가 나온다. 하나가 작게 나온다.

 

ex2) 7 + (-3) = 4 를 한번 해보자.

  0111(7)

+1100(3=0011, 1의 보수를 취하면 1100)

-----------

10010(오버플로우, 즉 4비트만 쓰니까 0011로 간주한다.)

이 같은 경우는 0011=3 라는 결과가 나온다. 또 하나가 작게 나온다.

 

첫 번째, 두 번째 예시를 보면 패턴이 보인다.

아! 오버플로우가 발생하면 하나 작은 값이 나오는구나!!

그러면 오버플로우가 발생하면 하나를 더 더해주면 되는구나!! 

 

 

그럼 A + (-A) = 0 은 검증이 될까?

 

ex1) 3 + (-3) = 0 이 되는지 알아보자.

  0011(3)

+1100(-3, 3의 1의 보수)

--------

1111

0의 값이 나올라면 0000이 나와야 되는데, 1111이 나온다.

오버플로우도 없는데 하나 작은 결과 값이 나온다.. 왜지?

 

ex2) 3 + (-0) = 3 이 나올까?

  0011(3)

+1111(-0, 0의 1의 보수)

--------

10010(오버플로우, 즉 4비트만 쓰니까 0010으로 간주한다.)

오버플로우가 발생했으니 결과 값에 +1 을 해주면 0011로 3이 나온다.

 

두 번째 예시에서 -0을 1111로 취해서 계산했더니 정답이 나왔다. (+0(0000)을 해줘도 그대로 정답이 나온다.)

그래서 첫 번째 예시 : A + (-A)의 식에서도 1111을 (-0)으로 정의한다면 정답이 된다. 근데 정말 마음에 들지 않는다.

그래서 2의 보수 계산법을 많이 추구한다.

 

오버플로우가 발생하면 결과값에 +1을 더해주고, 발생하지 않으면 그대로 쓰면 된다.

 

2의 보수 계산

ex 1) 7 + (-2) = 5

  0111(7)

+1110(2=0010, 1의 보수 값=1101, 2의 보수 값은 +1 해주니 1110)

-----------

10101(오버플로우, 즉 4비트만 쓰니까 0101로 간주한다.) 결과 값이 아주 잘 나온다.

 

ex 2) (-7) + 2 = -5

  1001(7=0111, 1의 보수 값=1000, 2의 보수 값은 +1 해주니 1001)

+0010(2)

-----------

1101(-5가 맞을까?) 확인하기 위해서는 결과 값에 다시 2의 보수를 취해보면 된다.

1101의 2의 보수 = 0101, 5가 정확히 나온다.

 

그럼 2의 보수에서는 +0과 -0은 어떨까?

+0은 0000이고, -0은 1의 보수를 취하면 1111이고

2의 보수는 +1을 하니 10000인데, 4비트만 취하니 0000 결과값이 나온다. 

(1의 보수에서는 0000과 1111로 달랐는데 말이다.)

 

A + (-A) 도 잘 나오는지 검증해보자.

ex) 5 + (-5) = 0

  0011(3)

+1101(5의 2의 보수)

-----------

10000(오버플로우, 4비트만 쓰니까 0000으로 간주한다.) 깔끔하게 0이 나온다. 2의 보수 시스템이 아주 완벽한 것 같다.

 

 

S-a-M, 1의 보수, 2의 보수 표

2의 보수에서 +0부터 -7까지 16개의 칸이 있는데,

1000이 나타나지 않았고, 0000이 2개가 나온다. 모든 값을 표현했을까?

2의 보수에서 1000의 정체가 뭘까?

 

1000에 2의 보수를 취하면 1000으로 똑같이 나온다. 무슨 값이지?

ex1) 1000(?) + 3 = 뭘까?

  1000(?)

+0011(3)

----------

1011로 일단 음수 값이 나온다. 무슨 값인지 알기 위해 2의 보수를 취해보면,

0101로 5가 나온다. 그러면 1000이 (-8)일까?

 

ex2) 1000(?) + 7

  1000(?)

+0111(7)

----------

1111로 음수 값이 나오니, 2의 보수를 취하면 0001로 1이 나온다.

 

두 가지 케이스로 인해서 1000은 (-8)이라는 값이 의도치 않게 나오고 있다.

 

 

2의 보수 예시1

 

2의 보수 예시2

 

'Study > Digital Logic Design' 카테고리의 다른 글

논리회로설계 4-1  (0) 2022.03.22
논리회로설계 3-2  (0) 2022.03.22
논리회로설계 2-2  (0) 2022.03.21
논리회로설계 2-1  (0) 2022.03.21
논리회로설계 1-2  (0) 2022.03.21

+ Recent posts