Photo by  Roberto Sorin  on  Unsplash

 

 

컴퓨터는 0 또는 1로 표시되는 비트*를 최소 단위로 삼아 내부적으로 데이터를 표시한다. 컴퓨터가 한 번에 처리하는 비트 수는 정해져 있는데, 이를 워드라고 한다. 예를 들어 64비트의 컴퓨터는 64개의 비트를 1워드로 처리한다. 4비트를 1워드로 처리하는 컴퓨터에서 양의 정수를 표현하는 경우, 4비트 중 가장 왼쪽 자리인 최상위 비트는 0으로 표시하여 양수를 나타내고 나머지 3개의 비트로 정수의 절댓값을 나타낸다. 0111의 경우 가장 왼쪽 자리인 ‘0’은 양수를 표시하고 나머지 ‘111’은 정수의 절댓값 7을 이진수*로 나타낸 것으로, +7을 표현하게 된다. 이때 최상위 비트를 제외한 나머지 비트를 데이터 비트라고 한다.

 

그런데 음의 정수를 표현하는 경우에는 최상위 비트를 1로 표시한다. –3을 표현한다면 –3의 절댓값 3을 이진수로 나타낸 011에 최상위 비트 1을 덧붙이면 된다. 이러한 음수 표현 방식을 ㉠ ‘부호화 절댓값’이라고 한다. 그러나 부호화 절댓값은 연산이 부정확하다. 예를 들어 7-3을 계산한다면 7+(-3)인 0111+1011로 표현된다. 컴퓨터에서는 0과 1만 사용하기 때문에 1에 1을 더하면 바로 윗자리 숫자가 올라가 10으로 표 현된다. 따라서 0111에 1011을 더하면 10010이 된다. 10010은 4비트 컴퓨터가 처리하는 1워드를 초과하게 된 것으로, 이러한 현상을 오버플로라 한다. 부호화 절댓값에서는 오버플로를 처리하는 별도의 규칙이 없기 때문에 계산값이 부정확하다. 또한 0000 또는 1000이 0을 나타내어 표현의 일관성과 저장 공간의 효율성이 떨어진다.

 

음의 정수를 나타내는 또 다른 방식으로 ㉡ ‘1의 보수법’이 있다. 보수란 보충을 해 주는 수를 의미하는 것으로, 어떤 수 a에 대한 n의 보수는 a와의 합이 n이 되는 수이다. 예를 들어 1에 대한 1의 보수는 0이고, 0에 대한 1의 보수는 1이다. 1의 보수법으로 음수를 표현하는 방법은 최상위 비트를 1로 표시하고 데이터 비트는 각 자리의 수에 대한 1의 보수로 나타내는 방식이다. 1의 보수는 각 자리의 수에 대해 합이 1이 되는 수이므로, –3을 1의 보수법으로 표현한다면 -3의 절댓값 3을 이진수로 나타낸 011에 대한 1의 보수 100이 데이터 비트가 된다. 여기에 음수를 표시하는 최상위 비트 1을 덧붙여 1100 이 된다. 1의 보수법에서는 오버플로가 발생할 경우 별도의 처리 규칙을 활용하여 계산값을 정확하게 할 수 있다. 그러나 계산값이 0000 또는 1111인 경우 0을 나타내는 문제는 해결할 수 없다.

 

㉮ 0이 두 가지로 표현되는 문제점을 해결한 음수 표현 방식이 ‘2의 보수법’이다. 2의 보수법은 1의 보수로 나타낸 다음 데이터 비트에 1을 더하는 방식이다. 2의 보수법으로 –3을 표현한다면, –3의 절댓값 3을 이진수로 나타낸 011에 대한 1의 보수 100을 구한 다음, 1을 더한 101에 음수를 표시하는 최상위 비트 1을 덧붙여 1101이 된다. 4비트를 1워드로 처리하는 컴퓨터를 가정하여 7-3을 2의 보수법으로 계산해 보자. 양의 정수를 표현하는 경우에는 1의 보수법이나 2의 보수법을 사용할 필요가 없다. 따라서 7-3은 7+(-3)이므로 2의 보수 법으로 0111+1101이 된다. 이를 연산하면 10100이 되어 4비트를 초과하게 된다. 2의 보수법에서는 오버플로가 발생하면 초과된 비트를 버려야 하므로 그 결과 0100이 나온다.

 

* 비트(bit) : 컴퓨터가 0과 1을 이용하는 이진법으로 연산을 수행하기 위해 사용하는 최소의 정보 저장 단위.

* 이진수 : 이진법으로 나타낸 수. 십진수 0, 1, 2, 3, 4, 5, 6, 7은 이진 수 000, 001, 010, 011, 100, 101, 110, 111로 나타냄.

 

 

― (출전) 박주미, 『이산 수학』
@ 2020학년도 3월 고3 전국연합학력평가, 27~30번.