안경잡이개발자

컴퓨터의진법 +1
728x90
반응형

● 정보의 표현

 

 기원 전 2000년경에 수메르인들은 60을 밑수로 하는 60진법을, 고대 로마인은 12을 밑수로하는 12진법을 사용했다고 합니다. 현재는 숫자 10개를 사용하는 10진법을 이용하고 있죠. 하지만 컴퓨터에서는 2진법, 8진법, 16진법이 가장 많이 사용 됩니다. 사실 어떠한 수가 있으면 그 수를 10진법으로 표현하면 10진수, 2진법으로 표현하면 2진수가 되는 것이죠.

​ 예를 들어 8이라는 10진수를 2진수로 바꾸면 1000(2)가 되겠고 8진수로 바꾸면 10(2)가 되고 16진수로 바꾸면 그대로 8이 되겠습니다. 여기까지는 하나씩 차근차근 생각해보면 쉽게 찾아낼 수 있으므로 대략적으로 이해하기만 해도 충분합니다. 자릿값은 수 체계에서 아주 중요한 개념으로서 진법에 따라 각 숫자는 별도의 자릿값을 가지게 됩니다. 모든 진수들은 정수 부분과 소수 부분을 가지게 됩니다. 123.456 이라는 10진수가 있으면​ 123은 정수 부분이고 456은 소수 부분이 되는데 이를 바꿔서 표현하면 이렇게 됩니다.

 1 x 10^2

 2 x 10^1

 3 x 10^0

 

 4 x 10^-1

 5 x 10^-2

 6 x 10^-3

 정말 간단합니다.

 다만 2진수와 8진수 그리고 16진수의 변환은 주의할 점이 있습니다. 예를 들어 2진수로 100101(2)이라는 수가 있다면 이것을 3개씩 묶으면 바로 8진수로 변환이 가능하다는 점입니다. 100101(2) = 45(8)인 것이죠. 이게 바로 8진수와 16진수를 이용하는 가장 큰 이유 중에 하나입니다. 2진법을 채택하는 컴퓨터의 구조 원리에 입각했을 때 아주 효율적입니다. 또한 문자나 숫자 등의 정보를 0과 1의 2진 체계로 처리하는 컴퓨터는 각각의 단어나 ​숫자라는 하나의 정보를 부호화하죠. 예를 들어 A는 65(10) = 01000001(2)로, 10은 10(10) = 00001010(2) 등으로 컴퓨터에서는 저장을 하고 있습니다.

 기본적으로 하나의 정보를 컴퓨터는 8비트 형태로 저장하니다. 8비트는 우리는 1바이트라고 부릅니다. 다만 한글은 알파벳에 비해서 더 많은 비트가 필요해서 한 글자당 2바이트가 필요합니다. 알파벳 및 숫자는 1바이트로 모두 표현이 가능합니다. 또한 워드(Word)라는 단어가 컴퓨터에서 많이 사용되는데 우리가 운영체제를 구입할 때 32비트, 64비트 운영체제를 구입하는 것을 생각하면 됩니다. 워드라는 것이 기억장치에 한 번 접근해서 얻을 수 있는 데이터의 양을 의미하는데 64비트 운영체제를 이용하는 사람은 CPU가 RAM(주기억장치, 램)에서 한 번 데이터를 뽑아올 때 마다 8바이트(64비트)씩 뽑아오니까 아주 좋은 성능을 갖추고 있다고 할 수 있는 것입니다. 요즘엔 거의 모든 사람들이 32비트 혹은 64비트 운영체제를 이용하고 있죠.​

​● 진법 변환

 진법 변환은 그다지 어렵지 않기 때문에 빠르게 이해하고 넘어가겠습니다. 우리는 12진법과 60진법 등등 실제로 다양한 진법을 활용하고 있습니다. 1분은 60초인데 이것만 봐도 60진법을 실제로 우리가 사용한다는 것을 이해할 수 있는 것이죠. 그리고 2진수, 8진수, 16진수를 10진수로 바꾸는 법은 정말 간단합니다.

 1011(2)를 10진수로 바꾸면 1 x 2^3 + 0 x 2^2 + 1 x 2^1 + 1 x 2^0 = 11(10)이겠죠. 20C(16)은 2 x 16^2 + 0 x 16^1 + 12(C) x 16^0 = 524(10)이 되겠습니다. 다만 10진수를 2진수, 8진수, 16진수로 변환할 때는 유의할 점이 있습니다. 10진수의 정수 부분을 2진수의 밑수인 2로 나누어 몫과 나머지를 계산하는 것이죠. 그리고 더이상 나누어지지 않을 때 까지 나누다가 역순으로 나열하면 됩니다.

 19(10)을 2진법으로 바꾸려면

 19 / 2 = 9 ... 1

 9 / 2 = 4 ... 1

 4 / 2 = 2 ... 0

 2 / 2 = 1 ... 0

 1 / 2 = 0 ... 1

 이렇게 2를 계속 나눠주는 것이죠. 나머지가 차례대로 1, 1, 0, 0, 1 이렇게 나왔는데

이것을 뒤집어서 10011(2)가 되겠습니다.

​52(10)을 16진법으로 바꿀 때도 같습니다.

 52 / 16 = 3 ... 4

 3 / 16 = 0 ... 3

 

 이렇게 되므로 34(16)가 되겠습니다. 정말 쉽고 간단하죠!

​ 소수 부분을 변환하는 것도 정말 간단합니다. 10진수의 소수 부분에 2진수의 밑수 2를 곱하고 소수 부분이 0이 될 때까지 밑수 2를 계속해서 곱하면 됩니다. 마지막에는 각 단계에서 발생하는 정수 부분을 순서대로 나열합니다.

 0.125(10)을 2진수로 바꾸겠습니다.

 0.125 x 2 = 0.250 ... 0

 0.25 x 2 = 0.500 ... 0

 0.5 x 2 = 1.000​ ... 1

 소수가 0이 될 때 까지 진행했으므로 이제 이것을 그대로 나열해줍니다.

따라서 정답은 0.001(2)​이 되겠습니다.

 이제 마지막으로 55.5(1)을 8진수로 변환해보겠습니다.

 55 / 8 = 6 ... 7

 6 / 8 = 0 .. 6

 즉, 정수 부분은 67(8)이 되겠고

 0.5 x 8 = 4.000 ... 0​

 이렇게 되므로 소수 부분은 0.4(8)이 되겠습니다.

즉, 정답은 67.4(8)으로서 깔끔하게 답이 나온 것이죠.​

728x90
반응형

Comment +0