임베디드

[메모리] 2의 보수와 음수 처리 / 2의 보수 쓰는 이유

히똔 2022. 4. 6. 17:46
728x90
반응형

양수 100은 0x64이다.
메모리에는 64000000로 표시된다. (리틀 엔디안 기준)

그러면 음수 100은 어떻게 저장될까?

 

음수처리

일단, 음수처리를 하기 위한 단계를 알아보자.

단계 액션 결과값
1 양수 100의 값을 비트로 표현하자 0b 0110 0100
2 비트를 반전시키자 0b 1001 1011
3 비트에 +1 하자 0b 1001 1100

구하고자 하는 숫자의 양수를 비트로 표현한 것을 뒤집고 1을 더하면 구할 수 있다.

이것을 2의 보수라고도 한다.

 

2의 보수

먼저, 십진수에서 보수를 구해보자.
십진수 3의 보수는 7이다. (10=3+7)

그런데 컴퓨터는 이진수로 이루어져있다.
그래서 2의 보수라고 한다.

2의 보수를 구하는 방식은 음수처리 하는 방식과 동일하다.
이것은 어떤 수의 음수 = 그 수의 2의 보수 라는 의미이다. ( -3 = 3의 2의 보수 )

보수를 위 방식보다 더 간편하게 구하는 방법이 있다.
N: 비트수, M: 값, C: M의 보수값 이라고 할때,

2^(N+1) = M+C

위와 같은 수식으로 C를 간편하게 구할 수 있다.

위와 같은 예시로 100의 2의 보수를 구한다고 해보자.
이때 N: 8, M: 100이 될 것이다.

수식
N 8
M 100
2^(N+1) 512
2^(N+1)-M 412
C (십진수) 412
C (이진수) 1001 1100

계산 결과 위 방식으로 구한 것과 같은 결과가 나온다.

 

그렇다면 왜 2의 보수를 굳이 어렵게 계산하는 것일까?

2의 보수를 쓰는 장점

뺄셈기를 따로 만들지 않고, 덧셈기를 통해 뺄셈을 할 수 있도록 하기 위함이다.

연산을 하기 위해서는 덧셈기와 뺄셈기가 필요할 것이다.
그렇다 그냥 각각의 로직과 게이트를 만들어서 두가지 연산기를 만들면 되는거다.

그런데, 뺄셈을 덧셈기를 통해서 할 수 있다면?
하나의 로직과 하나의 게이트로 뺄셈이 가능해진다.

즉, 장점을 간단하게 나열해보자면,

1. 뺄셈기 하드웨어를 따로 만들지 않아도된다.
2. 하나만 만들어도 되기 때문에 경제적으로 이득이다.

728x90
반응형