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의 보수 시스템이 아주 완벽한 것 같다.
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)이라는 값이 의도치 않게 나오고 있다.
'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 |