
2의 보수 표현법을 이야기하기 전에 우선 보수가 뭔지부터 이해해야 합니다.
보수란 뭐냐면
건물이나 시설 따위의 낡거나 부서진 것을 손보아 고침.
농담입니다.
보수는
“어떤 수를 기준으로, 더해서 그 기준이 되게 만드는 숫자"
입니다.
이게 무슨소리냐면 10의 보수라고 해볼게요.
어떤수 x 를 기준으로 y를 더하면 10이 되야하는 y 의 수, 라고 할 수 있습니다.
7의 10의 보수라고 해볼까요?
7에서 어떤수 y 를 더해야 10이 나올까요?
3이죠?
그럼 7의 10의 보수는 3이라고 할 수 있습니다.
근데 여기서 핵심적인 거 하나 알고가야해요.
우리가 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의 보수 표현법을 말할때는
예를들어서 4비트의 최댓값은 1111로 15예요.
0010 은 2죠? 그럼 몇을 더해야 15가될까요? => 13입니다. 13은 이진수로 뭐죠?
1101 입니다.
어???? 0010 <=> 1101 반전되있네? 소름돋죠.
그럼 2의 보수 표현법은 어떤 값을 말할까요?
=> n비트의 최댓값 + 1 입니다.
그래서 4비트일 경우에는 15가 최댓값이니 + 1해서 16 이 되는거예요.
"" 진짜 중요한 건 이름이 아닙니다. 2의 보수는 음수처리하기 위한 꼼수예요""
우선.. 간단한 예제로 2의보수로 바꿔볼까요?
4비트 0100 을 2의 보수 표현법으로 바꿔볼게요
이걸 2의 보수표현법으로 바꾸면
1100 이 되었습니다! 1100 은 십진수로 12 아니야? 왜 음수지?
2의 보수표현법에서는 가장 앞의 숫자가 1일 경우 음수로 표현합니다 - 를 곱해서요!
아.. 가장 앞의 비트를 - 로 더하는구나 라고 생각하시면 편해요!
그래서 우리는 양수 4를 음수 4로 표현하기 위해 2의 보수표현법으로 변경해준거예요!
!! 보수표현법이 안되는경우.
4비트 양수는 0000~1111 까지 십진수로는 0~15 범위를 가지고 있어요.
근데 2의 보수표현법을 사용하면 가장 앞의 자리를 음수 더하기로 계산하기 때문에
최소 -8 + 0 + 0 + 0 ~ 0 + 4 + 2 + 1 = -8 ~ 7 의 자릿수를 가져요.
각 비트 자릿수마다 최대 연산자가 달라요.
그건 int 자료형이 왜 -20억 ~ 20억인지의 이유와 비슷해요.
회고
이런 생각을 처음한 사람은 누구일까?
진짜 천재일까?
참 대단하다. 고작 0과 1로..
제 멘탈도 보수해주세용