[전자계산기구조] 1의보수 2의보수

[전자계산기구조] 1의보수 2의보수

보수 : 두 수의 합이 진법의 밑수(N)가 되게 하는 수
ex) 10진수 4의 10의 보수 -> 6,   10진수 2의 10의 보수 8


컴퓨터에서 음수를 표현하기 위해 처음 생각한 것은 1의 보수에 대한 표현입니다.
예를 들어 
4 : 0000 0100
-4 : 1111 1011
이런식으로 표현을 했습니다.
여기에서 참고로 사용하는 것은 7비트만을 사용합니다.
그 이유는 전부인 8비트를 사용하면 음수값과 구별이 안 되기 때문입니다.
이 때 숫자값으로 사용되지 않는 맨 앞비트를 부호로 표현했습니다. 
이를 사인비트라고 합니다.

그런데 1의 보수를 사용하다 보면 문제가 있습니다. 그 문제는 0이 2개가 생긴다는 것 입니다.

+0 : 0000 0000
-0 : 1111 1111

0은 매우 중요한 숫자이므로 이러한 문제가 발생이 되면 안됩니다 그래서 2의 보수를 만들게 되었습니다.

2의 보수는 1의 보수의 +1입니다.

그래서 1111 1111은 0이 아니고 -1입니다.

0000 0001 -> 1111 1110(1의보수) -> 1111 1111(2의 보수)

그러므로 한 바이트의 범위는 -128 ~ 127이 됩니다.

물론 2의 보수를 사용한다면 연산이 쉽게 됩니다.

우리가 보통 사용하는 컴퓨터들은 뺄셈 로직이 없습니다. 뺄셈 로직이 있다면 보수를 사용할 이유가 없어집니다. 
4-4를 그냥 연산하면 된다는 의미이겠지요. 하지만 뺄셈 로직이 없기 때문에 4-4를 4 + (-4)로 계산하게 됩니다. 4를 빼는것이 아니라 -4로 바꿔서 더하는 것입니다.
그럼 컴퓨터가 왜 2진수로 변환된 데이터만을 취급하는 이유에 대해 알아보겠습니다. 하드웨어적인 이유에서도 2의 보수를 사용하는 이유가 있습니다. 컴퓨터의 내부는 전자부품인 IC(Integrated Circuit = 직접회로)로 구성되어져 있습니다. 
간단히 말하자면 컴퓨터 내부를 뜯어 보았을 때, CPU의 양쪽에 여러개에서 수백개까지의 다리처럼 붙어있는 지네같은 모양을 IC라고 부릅니다. 
이 IC의 핀 1개로는 두 가지 상태밖에 나타낼 수 없습니다.
이러한 하드웨어의 여건상 컴퓨터는 부득이하게 2진수를 사용하게 되었습니다.
물론 더 좋은 IC를 개발할 수 있지만, 평이하고 대중화 시키기에는 2개의 전압을 갖는 IC를 제작하는것이 컴퓨터 가격면이나 성능면에서 결코 떨어지지 않기 때문에 사용하는 것입니다.


1의 보수

0은 1로
1은 0으로 바꾸는 방식입니다.

1의 보수
0000 0100 -> 1111 1011
이렇게 바꾸는 것이 1의 보수 입니다.


2의 보수

2의 보수는 1의 보수에 1을 더하는 것입니다.
0000 0100 -> 1111 1011 +1 -> 1111 1100
위의 예제처럼 2의 보수는 음수값을 가지고 있습니다.


출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?