이진수와 십진수
십진수를 이진수로, 이진수를 십진수로 변환하는 방법은 고등교육과정에서 배웠을 것이지만, 한 번 더 정리해도록 하자.
이진수와 십진수에 대해 얘기하기 위해, 먼저 이진수와 십진수, 이진법과 십진법이 무엇인지 정리할 필요가 있다.
사실, 우리 주변엔 10진법뿐만 아니라 다양한 진법이 존재한다. 오늘이 며칠이죠? 란 질문을 듣고 달력을 본다면, 아마 12진법을 체감할지도 모르겠다. 눈치채셨는가? 1년은 12개월로 되어있다. 12달이 지나야, 1년이 지난 것이다. 이와 비슷하게 시계는 12진법을 쓰고 있고, 분과 초는 60진법을 쓰고 있다. 12시간이 지나야 오전 오후가 바뀌고, 60초가 모여야 1분이 되며, 60분이 모여야 1시간이 된다. 사실, 과거에 1년은 10달이었으나, 이런저런 이유로 12달이 되었고, 1년=12달에 익숙해진 우리는 별 불만없이 이를 따르고 있다. 여기에 덧붙이자면, 요일은 월~일요일이 있고, 7진법이다. 신기하지 않은가?
(관련 기사: [라이프] 2월이 28일까지인 이유는 ‘황제의 욕심’ 때문이다? SBS 뉴스 news.sbs.co.kr/news/endPage.do?news_id=N1004603270)
이렇게 다양한 진법이 있는데 왜 10진법이 주로 쓰이게 되었을까? 우리의 손가락은 10개다. 발가락도 10개다. 자연스레 오늘날 우리가 주로 사용하는 아라비아 숫자는 10개의 숫자(0~9)를 가지게 되었고, 여기에 맞추어 십진법이 대성했다는 얘기를 들은 기억이 있는데, 여기에 적극 동의하고 싶다.
십진법은 0~9까지 10개의 숫자를 이용하는 방식으로, 일상생활에 많이 쓰이고 있다. 9 다음의 숫자는 뭔데? 10이다. 어떻게 10이 나왔지? 1의 자리에서 제일 큰 숫자는 9다. 9보다 큰 숫자를 어떻게 표현하지? 1의 자리에서는 더 큰 숫자를 표현할 방법이 없으므로, 10의 자리 숫자를 하나 올리는 것이다.
10의 자리 | 1의 자리 | |
9 | 0 | 9 |
10 | 1 | 0 |
10의 자리 0->1
01의 자리 9->0
09 -> 10
위와 같이 십진법으로 표현되는 수를 십진수라고 한다. 반면, 이진법으로 표현되는 수를 이진수라고 한다.
이진법에서는 0, 1이라는 2개의 숫자를 이용해 수를 표현한다. 아니, 0, 1만 갖고 어떻게 숫자를 표현해? 차근차근 살펴보자. 결과부터 미리 말해주면, 십진법의 10은 이진법에서 1010(2)와 같이 쓰인다.
십진수를 이진수로 변환하는 데에는 많은 방법이 있겠지만, 보편적으로 사람들은 십진수를 2의 거듭제곱의 합으로 표현하므로 이 방법을 소개하고자 한다. 말이 어려운가? 그림을 보면서 한번 생각해보자.
자료를 가져온 곳에서는 unsigned bit라는 개념을 설명하기 위해 그림을 그렸지만, 이진법의 설명에도 적절해 보여 그림을 가져왔다. 이진수(Bits)1010 건너편에 10이 있는 것을 볼 수 있다.
115라는 숫자가 있다. 십진법의 세계에서, 우리는 115를 100 + 10 + 5라고 나눌 수 있다. 이는 다시 1*$10^2$ + 1*$10^1$ + 5*$10^0$으로도 나타낼 수 있다. 즉, 자릿수에 맞도록 0~9에다가 10을 곱해주어 크기를 표현한 것이다.
우리가 115를 백십오라고 읽을 때에도, 100 + 10 + 5라는 수식이 내재되어 있다.
이진법의 세계에서 115를 어떻게 표현할까? 십진법에서 0~9에다 자릿수에 맞게 10을 곱해준 것처럼, 0~1에 자릿수에 맞도록 2를 곱해주면 된다. 115를 표현하기 위해, 2의 거듭제곱을 미리 계산해두면 편리해진다. 단, 지금 우리는 115를 이진수로 변환하고자 하므로, 115를 넘어서는 거듭제곱은 구할 필요가 없다.
1, 2, 4, 8, 16, 32, 64, 128
115는 1*128과 같은 형태로 표현할 수는 없다. 물론 128-13과 같은 꼴로 표현해줄 수는 있겠지만, 우리는 여기서 덧셈 연산만 할 예정이기 때문에, 128을 고르는 것은 부적절하다.
구해놓은 2의 거듭제곱의 결과들을 가지고 115를 표현해보자.
115 = 64 + ? 에서
? = 115 - 64 = 51
64 + ?가 115가 될 때까지 위와 같은 연산을 반복해준다. 단, 64+?는 115를 넘으면 안된다.
115 = 64 + 32 + ?
? = 115 - 64 - 32 = 115 - 96 = 15 + 4 (100+15 - 100+4) = 19
115 = 64 + 32 + 16 + ?
? = 115 - 64 - 32 - 16 = 115 - 112 = 3
115 = 64 + 32 + 16 + 8 + ?
? = 115 - 64 - 32 - 16 - 8 = 115 - 120 = -5
음수가 나오면 안된다. 따라서, 8에 해당하는 이진수엔 0을 곱해주어야 하는 것을 알 수 있다.
115 = 64 + 32 + 16 + 4 + ?
? = 115 - 64 - 32 - 16 - 4 = 115 - 116 = -1
마찬가지로 4에 해당하는 이진수엔 0을 곱해주어야 하는 것을 알 수 있다.
115 = 64 + 32 + 16 + 2 + ?
? = 115 - 64 - 32 - 16 - 2 = 115 - 114 = 1
115 = 64 + 32 + 16 + 2 + 1
? = 115 - 64 - 32 - 16 - 2 - 1 = 115 - 115 = 0
덧셈의 결과로 0이 나왔다. 따라서, 십진수를 이진수로 변환할 준비가 끝났다.
115를 표현할 때 덧셈에 기여한 숫자들에 1을, 표현에 기여하지 않은 숫자들에 0을 할당해주면 된다.
n | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
$2^n$ | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
할당 숫자 (0 혹은 1) |
1 | 1 | 1 | 0 | 0 | 1 | 1 |
따라서, 115는 1110011(2)로 표현할 수 있다.
∴ 1110011(2) = 115
반대로, 이진수를 십진수로 변환할 때에는 자릿수에 맞는 2의 거듭제곱을 모두 구해서 해당하는 이진수에 곱해준 뒤, 결과를 모두 더해주면 된다.
ex) 1011101(2) = ?
1*64 + 0*32 + 1*16 + 1*8 + 1*4 + 0*2 + 1*1
64 + 0 + 16 + 8 + 4 + 0 + 1 = 93
∴ 1011101(2) = 93
이 방법을 사용하면 중복이나 누락 없이 십진수를 이진수로 잘 표현할 수 있고, 원리를 이해하면 세상사람들과 잘 소통할 수 있다는 장점이 있다. 특히, 정보를 저장하거나 전송할 때 사용되는 bit란 단위는 0과 1로 이루어진 이진법을 사용하는데, bit 정보를 십진수로 변환할 때에도 유용하다.
마지막으로, 맨 처음에 언급했던 1010(2) = 10에 대해서도 간단히 알아보자.
1010(2) = 8 + 0 + 2 + 0 = 10 [8*1 + 4*0 + 2*1 + 1*0]
[같이 보기 : ASCII code(아스키 코드) https://seongsu-minki.tistory.com/15]