이것에 대해 특별히 생각해 본적은 없었는데 오늘 생각해봤다.
대부분의 프로그래머나 일부 관심있는 사람들은 알겠지만 2진수와 16진수 사이의 변환은 쉽다.
0100100001110101 은 0x4875이다.
16은 2의 4승이므로 2진수 4개가 모여 하나의 16진수 숫자를 표현할 수 있다.
그래서 4개 단위로 나눠 0100 1000 0111 0101 로 나눈 후 4개씩 변환한다.
2진수 4자리가 각각 8,4,2,1로 그 비트가 1이면 그 수만큼 더하면 된다.
0100은 8x0 + 4x1 + 2x0 + 1x0 = 0x4
1000은 8x1 + 4x0 + 2x0 + 1x0 = 0x8
0111은 8x0 + 4x1 + 2x1 + 1x1 = 0x7
0101은 8x0 + 4x1 + 2x0 + 1x1 = 0x5
물론 나는 이런것에 대해 논리적으로 생각해보지 않았었고 경험상 알게된거다..
그럼 2진수나 16진수와 10진수 사이의 변환은 왜 어려운가?
위의 논리대로 계산이 가능하도록 하려면 다음을 만족해야한다.
10진수는 정수중 어떤 수의 몇승인가?
3진수와 9진수라면 3의 2승이므로 3을 두개 단위로 끊어서 계산하면 된다.
21 01 20 == 7 1 6
3진수와 27진수라면 3을 3개 단위로.
210 120 == 21 15
하지만 10은 그런 수가 없다.
혹시 숫자 10은 단순히 손가락이 열개이기 때문에 훌륭한 숫자인걸까?
싸이 블로그 백업 [하zi 2008.08.12 14:51]