avatar
Published on

프로그래머 기초 수학 2-2 - 기수법

Author
  • avatar
    Name
    yceffort

기수법

우리가 흔히 사용하는 숫자 1234는 다음과 같이 표현할 수 있다.

1234=(1×103)+(2×102)+(3×101)+(3×100)1234 = (1 \times 10^3) + (2 \times 10^2) + (3 \times 10^1) + (3 \times 10^0)

여기 나오는 10처럼 그 거듭 제곱으로 자리의 값을 취하는 숫자를 이라고 하고, 체계의 이름은 진법이라는 말을 붙인다. 즉 저 숫자는 10진법으로 나타낸 수다. 어떤 진법을 썼는지 나타내기 위해서는 밑에 작게 표현한다

1234(10)1234101234_{(10)} 1234_{10}

이와 비슷하게, 0과 1로만 표현되어 있는 숫자는 2진법이라고 한다. 2진법은 논리적으로 참과 거짓에 대응 되며, 이는 전기 신호로 1, 0을 표현하는 컴퓨터의 기본체계를 이룬다.

11012=(1×23)+(1×22)+(1×21)+(1×20)=(8+4+0+1)13101101_{2} = (1 \times 2^3) + (1 \times 2^2) + (1 \times 2^1) + (1 \times 2^0) = ( 8 + 4 + 0 + 1) 13_{10}

이와 비슷하게, 16비트로 나타낼수 있는 수는 2161=655362^{16} - 1 = 65536이다.

2진법과 더불어 컴퓨터 과학분야에서 많이 쓰이는 것이 16진법이다. 16진법은 0~9와 더불어 A, B, C, D, E, F 를 사용하여 숫자를 표현한다. 각각 10, 11, 12, 13, 14, 15를 나타낸다.

CAFE16=(12×163)+(10×162)+(15×161)+(14×160)=5196610CAFE_{16} = (12 \times 16^3) + (10 \times 16^2) + (15 \times 16^1) + (14 \times 16^0) = 51966_{10}

근데 왜 하필 16진수가 널리 쓰이게 된것일까? 그것은 2진수를 인간이 좀더 보기 쉬운 형태 (242^4)로 바꾼 것이 기 때문이다. 이는 정확하게 4비트를 나타낸다.

2진수00000001001000110100010101100111
16진수01234567
2진수10001001101010111100110111101111
16진수89ABCDEF

0과 1을 나열한 것은 바로 알아보기 쉽지 않지만, 이를 네개씩 묶어서 표현할 수 있다.

1011 1110 1110 11112BEEF161011\space1110\space1110\space1111_{2} BEEF_{16}

거꾸로 10진수를 다른 진법으로 나타내기 위해서는, 해당 10진법 숫자를 변환을 원하는 밑으로 나누어서 표현하면 된다.

코드 구현

var dec = 123
var hex = dec.toString(16) // 변환을 원하는 밑을 넣는다.
var bin = dec.toString(2)

var hex = '7b'
var dec = parseInt(hex, 16) // 해당숫자의 밑을 넣는다.
var bin = dec.toString(2)