KMU/논리회로설계

[논회설] 논리회로설계 강의 요약해보기 03

happykoa 2020. 5. 3. 14:34

이진수 덧셈

 

Ex1.

 

  1001 (9)
+ 0101 (5)
---------
  1110 (14)

Ex2.

  1011 (11)
+ 0110 (6)
---------
 10001 (17?)
Overflow 발생!!!

overflow가 뭔데?

Overflow의 결과는 이 덧셈의 답이 아닐까?, 정답이 아닌것은 아니다. 단지, 정답을 사용할 수 없게 된 것이고 특별한 상황인것이다. 따라서, 이 특별한 상황이 나온다는 것을 detect 해야 한다.

 

- 정리된 말:

디지털 시스템은 정해진 크기의 자리에 들어가는 정보를 처리하는 데, 이 정해진 크기에 맞지 않는 정보를 저장하면 Overflow가 발생된다.

 

부호가 있는 수를 이진수로 표현하기

방법을 3가지로 생각해볼 수 있다.

1. MSB(Most Significant Bit, 최상위 비트)로 부호를 표현하자.

(MSB는 이진수가 있을 때, 맨 앞 비트를 의미한다. 수업에서 언급된 표현은 아님.)

"맨 앞 비트를 제외하고 n-1개의 비트를 활용하여 숫자를 표현하고, 맨 앞 비트가 0이면 양수, 1이면 음수라고 하자!"라는 방법이다.

 

예를 들어, 0101 은 5이고 1101은 -5이다.

 

문제점은?

부호가 같을 경우와, 다를 경우에 추가적인 처리를 해야한다.

(부가적인 회로가 필요하다.)

 

Ex1.

 

  0111 (7)
- 1010 (-2)
---------
  0101 (5) ???

 

추가적으로, 0의 표현과 관련된 문제이다.

 

0이 중복된다. 0000과 1000이 모두 0인데, 사실상 +0과 -0으로 표현하는 것이다. 

이렇게 되면 +0과 -0을 따로 처리해야 하는 문제점이 생긴다는 것이다.

 

2. 1의 보수를 활용하자.

"어떤 수가 K라면, 이 K의 1의보수를 -K라고 정의하자!"는 게 1의 보수로 음수를 표현하는 방법이다.

이 방법은 2가지 경우로 나누어 봐야 한다.

 

- 최상위 비트로 넘어오는 캐리가 없는 경우

이 경우는 문제가 발생하지 않고, 상관하지 않아도 된다.

 

- 최상위 비트로 넘어오는 캐리가 있는 경우

이 경우가 문제다.

만약 최상위 비트로 넘어오는 캐리가 있을 때,

이 캐리를 다시 최하위 비트에 더해줘야 한다.

   0101 (5)
+  1101 (-2)
-------------
(1)0010 (-13)
+     1
-------------- 
   0011 (+3)
   1010 (-5)
+  1101 (-2)
-------------
(1)0111 (-8)
+     1
-------------- 
   1000 (-7)

 

또, 추가적으로 0의 표현 중복 문제가 있다.

1의 보수 표현 방식 또한 0000과 1111 2개의 표현이 모두 0을 나타내고, +0과 -0으로 0이 2가지로 구분된다.

3. 2의 보수를 활용하자.

"어떤 수가 K라면, 이 K의 2의보수를 -K라고 정의하자!"는 게 2의 보수로 음수를 표현하는 방법이다.

 

2의 보수를 구하는 방법은 정말 쉽다.

1의 보수를 구한 뒤에, 1을 더하면 된다.

 

이번에도 2가지의 경우로 구분해보자.

1) 최상위 캐리가 있는 경우

그냥 최상위 캐리를 무시하면 된다!

2) 최상위 캐리가 없는 경우

이 경우는 따로 고려할 게 없다.

 

 

덧셈을 활용한 덧셈

요건 사실상 당연한 이야기이다.

A - B = A + (-B), A - (-B) = A + B 등처럼 표현하면 되기 때문이다.

 

Rmx