이 주제에 대해 안지는 꽤 오래되었지만 시간이 조금만 지나도 자꾸 까먹고 정확하게 이해를 못한것 같아 오늘 한번 제대로 정리하려고한다.
우선 2의 보수를 사용하는 이유는 0 때문인데 현실세계에서의 0은 부호가 딱히 없다.
그러나 컴퓨터에서는 음수와 양수를 나타내기 위한 방법중 하나로 제일 왼쪽비트에 0이면 양수 1이면 음수 이렇게 나타내는 방법이 있는데 이런식으로 나타낼경우 -0과 +0이 공존하는 문제가 있다.
하지만 2의 보수의 경우는 0이 하나만 존재한다. 4bit의 간단한 계산으로 증명해보자.
우선 1의보수는 +0을 나타내는 0000과 -0을 나타내는 1111이 이렇게 두가지가 있다.
2의 보수의 경우는 0000에 2의 보수를 취하면 1111(0을 1로 뒤집고) + 1을 해주면 10000이 나오는데 4bit로 나타내기 위해서는 제일 왼쪽 1이 사라진다. (10000은 5bit이기 때문에)
그러므로 2의보수로는 0이 한가지만 존재하게 된다.
자 이제 2의 보수를 이용한 컴퓨터의 계산을 알아보자면 우선 컴퓨터는 사실 뺄셈이란게 없다.
예를들어서 8 - 6을 한다고 해보자. 컴퓨터에서 이 식을 계산하는 과정은 6을 -6으로 바꾸고 8과 더하는 것이다.
이 과정에서 2의 보수가 쓰이는데 컴퓨터는 이진수를 쓰므로 8 - 6은 1000 - 0110이다.
2의 보수를 적용하는 방법은 1과 0을 뒤집고 +1을 해주면 된다.
즉, 0110은 1010이 된다. 이 1010은 2의 보수를 취한 수로 -6을 뜻하게 되는 것이다.
그럼 1000 + 1010 = 10010인데 이렇게 제일 왼쪽 비트에서 자리올림이 발생한경우는(즉 결과가 양수라는 뜻 그냥 제일 왼쪽비트의 1을 없애주면 된다. 그럼 답이 0010으로 십진수로 나타내면 2가된다.
만약 자리올림이 발생하지 않았다면 우리가 계산한 답이 음수라는 뜻이다. 그럼 2의 보수의 과정을 반대로 해주어서 변환을 해주어야 한다. 즉, 답이 x라고 가정하면 x - 1을 한 후에 1과 0을 뒤집어주고 거기에 -기호만 붙이면 원하는 답이 나온다.
'CS기본' 카테고리의 다른 글
캐시메모리란? (0) | 2020.11.14 |
---|---|
1의 보수와 2의 보수 (0) | 2020.11.06 |