본문 바로가기

it관련

컴퓨터에서 1의보수 2의보수가 필요한 이유

반응형

컴퓨터에서 1의보수 2의보수가 필요한 이유


보수의 필요성 

 

보수가 필요한 이유는 여러가지 있지만 가장 중요한 것은컴퓨터에서 음수의 연산을 양수로 바꾸어 계산하기 위해서 입니다. 

 

컴퓨터에서 음수를 나타내는 방법은 여러가지의 시도가 있었습니다. 

다양한 방법으로 접근을 하다가 가장 합리적인 방법으로 사용되는 것이 최상위 비트 

MSB(Most Significant Bit)를 이용한 부호비트를 통한 2의 보수를 취하는 방법입니다. 

 

즉!!  

컴퓨터에는 음수의 연산이 없다. 

덧셈으로 뺄셈에 대한 연산을 처리해야 한다. 

더해서 0이 되는 수를 만들면 된다. 

 

이것이 보수를 사용하기 위한 필요성입니다. 

 

이제부터 보수에 대해서 알아 보도록 하겠습니다. 

  

보수란?


 

그럼 보수가 무엇일까요

 

기수 n의 보수란 어떤 수가 n이 되기 위해서 더해야 하는 수입니다.

 

10진수 50까지의 수로 생각하고 20이라는 수치의 보수를 생각해 보면

1을 기준으로 20번째의 자리에 위치하고 있지만 50을 기준으로 생각해보면

30번째의 수가 20됩니다.

 

50에 대한 20의 보수는 30이되는 것입니다.

 

주어진 기수에 대해 주어진 수치값을 반대로 세어 가는 수

이것이 보수 입니다.

 

보수를 구하는 공식도 존재합니다.

 

기수 n에 대해서 n-1을 한후 주어진 수치값을 뺀후 최하위 자리수에 1을 더하면

이것이 보수가됩니다.

 

위의 예를 들어보면

주어진 기수 50에 n-1을 하면 49가 됩니다.

여기에 주어진 수치 20을 빼면 29가 되고

최하위 자리에 1을 더하면 30이 됩니다.

 

이처럼 보수는 반대의 의미를 가지고 있습니다.

100이라는 기수에 대해서 25의 보수는 75가 됩니다.

100이라는 기수에 대해서 80의 보수는 20이 됩니다.

 

위에서 보수의 필요성에 대해서 말씀을 드렸습니다.

컴퓨터에서 음수 연산을 하기위해서 이 보수의 규칙을 이용합니다.

 

아래의 설명에서는 모든 연산은 2진연산으로 설명합니다.

컴퓨터 내부적으로 연산은 2진으로 사용하기 때문입니다.

 

일단 0의 보수를 구해 보도록 하겠습니다.

 

필요성에서 언급한 것 처럼

더해서 0이 되는 수를 구하면 되는 것입니다.

 

1111 1111(2) + 1 = 1 0000 0000 이됩니다.

32개가 되더라도 33자리에 1이 되고 32자리 까지는 0이됩니다.

그럼 결과는 더해서 0이 되는 수 입니다.

 

이처럼 0이 되는수를 만드는 것이 컴퓨터에서 음수 연산을 하기 위해 사용 하는 방법으로 양수를 이용하여 음수연산을 표현 하기 위해 보수가 사용되는 것 입니다.

 

1의 보수 

 

 

1의 보수를 구해 보도록 하겠습니다.

1의 보수는 주어진 2진수의 각각의 비트를 반전 연산해서 나타낸 것이 1의 보수입니다.

 

2진법 에서 사용되는 수는 0 과 1 만을 사용하여 2가지의 숫자로 표현된 수를

2진수 입니다.

 

즉 0은 1로 1은 0으로 반전을 하게되면 해당 2진수의 1의 보수가 되는 것입니다.

 

10진수 10을 2지수로 표현할 경우 ( 4자리 니블 단위로 표현 하는것이 좋지만 byte단위 8자리로 표현 하도록 하겠습니다. )

 

0000 1010(2) 이것이 10진수 10에 대한 2진수 입니다.

그럼 여기에 1의 보수 형태를 취해 보도록 하겠습니다.

 

1111 0101(2) 이것이 2진수 0000 1010(2)에 대한 1의 보수가 되는것입니다.

 

이것을 수식으로 표현 하겠습니다.

2진수 n자리수에서(여기에서는 8자리 이니 8입니다.) - 1하면 됩니다.

 

1 0000 0000 - 1 = 1111 1111 이 됩니다.

이렇게 표현된 수에 해당 2진수를 빼게 되면 결과값이 보수가 됩니다.

  1111 1111

- 0000 1010

------------

  1111 0101(2) 이것이 0000 1010(2)에 대한 1의 보수입니다.

 

아래의 수식이 2진수에서 보수를 구하는 공식 이지만


 

위의 수식보다 그냥 주어진 수를 반전 시키는 것이 더 쉽기 때문에 그렇게 하는것입니다.

 

1의 보수는 그리 어렵지 않습니다.

 

 

2의 보수 

 

 

컴퓨터에서 보수를 사용하는 것은 음수의 표현을 하기 위함 이라고 했습니다.

1의 보수만 취한것은 2진수에 대한 1의 보수만을 취한것이지 아직 음수가 아닙니다.

 

2진수 이기 때문에 2의 보수형태를 취해 주어야 음수가 표현 되는것입니다.

 

2의 보수를 구하는 방법은

2진수로 표현된 수에 1의 보수를 취한후 최하위 자리수에 1을 더해주면 됩니다.

이렇게 표현된것이 해당 2진수의 음수의 형태가 됩니다.

 

1의 보수에서 사용한 수를 그대로 사용하겠습니다.

 

10진수 10에 대한 2진수는 0000 1010(2)입니다.

그럼 이 2진수를 1의 보수형태로 취해보도록 하겠습니다.

1111 0101(2) 이것이 0000 1010에 대한 1의 보수입니다.

그럼 최하위 자리수 에 1을 더하면

  1111 0101

+ 0000 0001

-----------

  1111 0110 <--- 이것이 2진수 0000 1010에 대한 음수가 됩니다.

 

그러면 이것이 진짜 음수일까 2개의 수를 더해서 0이 되면 0의 보수 즉 음수가 됩니다.

  0000 1010

+ 1111 0110

-----------

1 0000 0000

이렇게 됩니다. 지금 표현하는 자리수는 8자리이기 때문에 0000 0000 이됩니다.

32자리가 되어도 64자리가 되어도 값은 같습니다.

32자리는 33자리가 1이되어 버림수가 되고

64자리는 65자리가 1이되어 버림수가 됩니다.

 

즉 0이 되는것입니다.

 

음수가 맞는지 검산 하는 작업은 음수로 표현된 수를 역순으로 해보면 됩니다.

1111 0110(2)에다가 1을 빼주고 다시 이것을 1의 보수형태로 취하면 양수형태가 됩니다.

 

  1111 0110

- 0000 0001

-----------

  1111 0101

여기에 다시 1의 보수

  0000 1010

위에서 표현한 2진수가 나왔습니다.

 

2의 보수도 어렵지 않죠^^

 

이렇게 컴퓨터는 내부적으로 음수표현을 하기위해 양수 연산을 사용합니다.

 

이것이 보수를 사용하는 이유입니다.

 

반응형

'it관련' 카테고리의 다른 글

포토샵 단축기 모음  (0) 2017.06.08
진수란? 진법변환이란? 진법변환이 필요한 이유  (0) 2017.06.07
제닉스(XENICS)  (0) 2017.06.07
아이핀(I-PIN) 이란  (0) 2017.06.07
JavaScript 로딩바 간단하게 구현  (0) 2017.06.07