프로그래밍/컴퓨터 구조

2진수 (Binary Number)

sinwindis 2021. 1. 26. 09:17

첫 글을 어떤 내용에 관해 써야 할까 고민하다가 자료형에 대한 글을 썼는데, 글을 쓰던 도중에 2진수에 대한 설명이 먼저 필요할 것 같아 2진수를 먼저 설명하려 한다.

 

먼저 우리가 주로 쓰는 10진수에 대해 알아보자. 10진수는 숫자를 표현할 때 쓰는 기호의 숫자가 10개(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) 이기 때문에 10진수이다.

10진수의 특징은 기호가 10개이기 때문에 한 자리수에 총 10가지의 숫자를 표현할 수 있다. 아무것도 없음을 나타내는 0, 0보다 한 단위 더 큰 숫자 1, 1보다 한 단위 더 큰 숫자 2.... 이렇게 9까지 총 10가지의 숫자를 표현할 수 있다. 만약 10가지보다 더 많은 숫자를 표현하고 싶으면 어떻게 해야 할까? 11진법(숫자를 나타내는 방'법'이라 진'법'이다. 10진수를 표현하는 체계는 10진법, 2진수를 표현하는 체계는 2진법이다) 을 발명해야 하는 것일까?

당연하게도 그렇지 않다. 10진수는 한 자리수에 최대 10가지의 숫자를 표현할 수 있지만 그게 10진수가 최대 10가지의 숫자를 표현할 수 있다는 뜻은 아니다. 한 자리수에서 표현할 수 있는 가장 큰 숫자 9 보다 더 큰 수를 표현하려면 자리수를 늘려 두 자리수로 만들어 주면 된다. 새로운 자리수는 가장 왼쪽에 추가해 준다. 새로운 자리수가 생겼으니(엄밀히 말하면 윗 자리수에 아무것도 없었으므로 아무것도 없다는 뜻인 0이라는 숫자가 있었다고 생각해야 한다) 새로 생긴 자리수에 0보다 한 단위 큰 1을 써 주고 기존에 있던 숫자는 비워서 0으로 만들어 준다. 이렇게 생긴 숫자가 바로 '10'이다. 만약 10보다 더 큰 숫자를 만들고 싶다면? 가장 작은 자리수의 숫자를 늘려주면 된다. 10보다 한 단위 더 큰 숫자는 가장 낮은 자리수인 0을 1로 바꾼 11이다.

너무나 쉬운 얘기를 장황하게 했는데 굳이 다 아는 얘기를 이렇게 풀어 쓴 이유는 다른 진법의 숫자도 똑같은 방식으로 표현할 수 있기 때문이다. 10진수보다 약간 더 작은 8진수를 예시로 들어 보자.

8진수는 한 자리에 표현할 수 있는 숫자가 8가지이다. (0 ~ 7) 따라서 10진수에서의 0 ~ 7은 8진수에서도 똑같이 0 ~ 7로 표현할 수 있지만 10진수의 8은 8진법에서 표현할 수 있는 기호가 없다. 따라서 8진수의 한 자리수에서 표현할 수 있는 가장 큰 숫자인 7보다 한 단위 더 큰 숫자를 표현하기 위해 자릿수를 늘려줘야 한다. 8진법에서 7보다 하나 더 큰 숫자는 바로 10이다.

2진수는 한 자리에 표현할 수 있는 숫자가 달랑 2가지이다. (0, 1) 따라서 10진법에서의 0과 1은 2진법에서도 동일하게 표현할 수 있지만 겨우 10진법의 2만 표현하려 해도 2진법에서는 자리수를 추가해 줘야 한다. 10진법의 2는 2진법에서 10이다. 계속해서 10진법의 3은 2진법에서 11인데, 10진법의 4는 2진법에서 어떻게 표현해야 할까?

10진법의 4는 2진법의 11보다 1 더 큰 숫자이다. 11에 1을 더하면 12일까? 아니다. 2진법에서는 0과 1밖에 표현할 수 없기 때문에 자리수를 추가해 줘야 한다. 그럼 11에 1을 더하면 20일까? 역시 아니다. 위와 똑같은 이유로 자리수를 한 번 더 추가해 줘야 한다. 따라서 10진법에서의 4는 2진법에서 100이다. 이어서 10진법에서의 5, 6, 7, 8은 2진법에서 각각 101, 110, 111, 1000이다.

 

우리가 사용하는 컴퓨터에서 무언가를 저장하고, 불러올 때 컴퓨터가 읽는 값은 모두 2진수로 되어 있다. 앞으로 컴퓨터에 대해 공부하다 보면 2진수를(8진수와 16진수도) 만날 일이 많을 것이므로 미리 친해지는 편이 좋겠다.