난 정보통계학과를 나왔다.
따라서 전산학에 대한 지식은 거의 없는 편이지만...
아... 변명부터 하고 시작할랬는데, 생각해보니 선택교양과목으로 컴퓨터개론을 들었었다. ㅋㅋ

여튼 난 전산학 지식이 없는 건 맞다. 컴퓨터 개론 시간에는 친구들 대출 돌려막기가 유행했을 정도로 수업은 별 관심도 없었다. 그 당시만 해도 소프트웨어와 컴퓨터는 별개라고 생각했다.

리버스 엔지니어링을 해보려고 어셈블리를 좀 보다가 보니 2의 보수 얘기가 나왔다.
그래서 예전에 잠깐 들었던... 하지만 이해는 하지 못했던 내용.

그때 교수님의 설명은 이러했다.
"1은 0으로, 0은 1로 바꾸는 것이 1의 보수이고, 1의 보수에 1을 더한 것이 2의 보수입니다"
"2의 보수는 컴퓨터에서 뺄셈을 구현하는데 사용하니 알아 두셔야 합니다"

왜 1의 보수에 1을 더하는 것인지가 궁금해졌지만 책에 설명이 없어서 결국 그냥 머리속에서 지워버렸다.

그런데 오늘 어떤 블로거의 글에서 해답을 얻었다. 다음은 정확한 글은 아니고 기억에 의존해 쓴 글이다.
1byte를 예로 들면 제일 처음 1비트는 부호로 사용하고, 양수에 128가지 수, 음수에 128가지의 수를 둘 수 있다. 0은 표현해야 하니까 양수는 0부터 127까지, 음수는 -127부터 -0까지 하면 된다(1의 보수). 나는 이것이 좋지만 사람들은 0과 -0이 둘 다 사용된다는 것이 못마땅했나보다. 그래서 음수는 -128부터 -1까지로 정하였고, 양수보다 음수가 하나 더 많아졌다(2의 보수).(-128 ~ 127)
물론 더 검색을 해봤기 때문에 2의 보수가 뺄셈이 더 편해서 (계산 후 +1을 해줘야 한다) 그렇게 정했다는 글도 봤다. 하지만 나는 위 얘기가 이해가 더 잘되고 와 닿는다.

이 글 쓰면서 생각난건데, 만약 0과 -0이 따로 존재한다고 생각해보면 이건 또 zero hell 이 될 것 같다. 0과 -0은 수학적으로 같아야 하지만 비트는 분명 틀릴테니까.

뭐 이제 누가 나에게 2의 보수를 왜 쓰냐고 물어본다면 그냥 뺄셈 때문이라고 말하진 않을 것 같다.

참... 이건 내 생각인데, 2의 보수가 "2의 보수"라는 이름이 붙은 이유는 1의 보수에 1을 더하기 때문에 붙여진 이름이겠지? ㅡ_ㅡ;

+ Recent posts