2의 보수 표현법 [ 크래프톤 정글 11일차 ]

jinsung·2025년 5월 23일

크래프톤 정글 9기

목록 보기
9/59

음수 표현을 위한 2의 보수 표현법

1. 보수

2의 보수 표현법을 이야기하기 전에 우선 보수가 뭔지부터 이해해야 합니다.

보수란 뭐냐면

건물이나 시설 따위의 낡거나 부서진 것을 손보아 고침.

농담입니다.

보수는

“어떤 수를 기준으로, 더해서 그 기준이 되게 만드는 숫자"

입니다.

이게 무슨소리냐면 10의 보수라고 해볼게요.

어떤수 x 를 기준으로 y를 더하면 10이 되야하는 y 의 수, 라고 할 수 있습니다.

7의 10의 보수라고 해볼까요?

7에서 어떤수 y 를 더해야 10이 나올까요?

3이죠?

그럼 7의 10의 보수는 3이라고 할 수 있습니다.

  • 그럼 1의 보수는 ?
    => 어떤수를 더해서 1이 되는수가 1의 보수겠죠?

근데 여기서 핵심적인 거 하나 알고가야해요.
우리가 7에서 10을 더해도 3인데 10에서 7을 빼도 3이죠?
그래서 보수 : 기준값 - 어떤수 라고도 볼 수 있어요.

0의 1의 보수 => 1
1의 1의 보수 => 0

즉, 1의 보수는 비트를 반전한 것! 이라고 할 수 있습니다.

예시) 0101 (십진수 5) => 1010 (1의 보수)

2의 보수는 1의 보수에 + 1 을 해주면 되어요.

엥????

보수는 어떤 수가 되기 위해 더하는 값이라면서요.

"더해서 2도아닌데 뭔 2의 보수표현법 님 지금 장난하시는??"

2의 보수 표현법은 더해서 2가 되는 값은 아니다.

그럼 어떤 값을 말할까요?

1의 보수 표현법을 말할때는

  • "모든 비트가 1로 채워져 있는 경우"

예를들어서 4비트의 최댓값은 1111로 15예요.

0010 은 2죠? 그럼 몇을 더해야 15가될까요? => 13입니다. 13은 이진수로 뭐죠?
1101 입니다.

어???? 0010 <=> 1101 반전되있네? 소름돋죠.

그럼 2의 보수 표현법은 어떤 값을 말할까요?

=> n비트의 최댓값 + 1 입니다.

그래서 4비트일 경우에는 15가 최댓값이니 + 1해서 16 이 되는거예요.

  • 4비트 기준으로는 더해서 16이 되는 경우 라고도 말할 수 있습니다.

"" 진짜 중요한 건 이름이 아닙니다. 2의 보수는 음수처리하기 위한 꼼수예요""

2. 그래서 2의 보수로 음수처리를 어떻게해?

우선.. 간단한 예제로 2의보수로 바꿔볼까요?

4비트 0100 을 2의 보수 표현법으로 바꿔볼게요

  • 0 x 2^3 + 1 x 2^2 + 0 x 2^1 + 0 x 2^0 = 4 , 십진수로는 우선 4라는걸알수있네요.

이걸 2의 보수표현법으로 바꾸면

  1. 0100 을 1의 보수표현법으로 변환
    => 1011
  1. 1011 을 2의 보수표현법으로 변환
    => 1100

1100 이 되었습니다! 1100 은 십진수로 12 아니야? 왜 음수지?

2의 보수표현법에서는 가장 앞의 숫자가 1일 경우 음수로 표현합니다 - 를 곱해서요!

  • -1 x 2^3 + 1 x 2^2 + 0 x 2^1 + 0 x 2^0 = -4 네요!

아.. 가장 앞의 비트를 - 로 더하는구나 라고 생각하시면 편해요!

그래서 우리는 양수 4를 음수 4로 표현하기 위해 2의 보수표현법으로 변경해준거예요!

!! 보수표현법이 안되는경우.

4비트 양수는 0000~1111 까지 십진수로는 0~15 범위를 가지고 있어요.

근데 2의 보수표현법을 사용하면 가장 앞의 자리를 음수 더하기로 계산하기 때문에

최소 -8 + 0 + 0 + 0 ~ 0 + 4 + 2 + 1 = -8 ~ 7 의 자릿수를 가져요.

  • 그래서 4비트에서는 7을 초과하는 경우는 2의 보수표현법을 사용해서 음수변환이 불가능해요

각 비트 자릿수마다 최대 연산자가 달라요.

그건 int 자료형이 왜 -20억 ~ 20억인지의 이유와 비슷해요.

회고

이런 생각을 처음한 사람은 누구일까?
진짜 천재일까?

참 대단하다. 고작 0과 1로..

1개의 댓글

comment-user-thumbnail
2025년 5월 23일

제 멘탈도 보수해주세용

답글 달기