[python] 16진법 사용 이유
16진법이란
16진법은 10개의 숫자(0~9)와 6개의 문자 (A~F)를 사용해서 값을 표현합니다.
문자는 A(10), B(11), C(12), D(13), E(14), F(15)이며 아래 표를 참고하세요.
위 그림에서 2진법은 15라는 숫자를 4자리로 표현하는 반면 16진수는 1자리로 표현할 수 있습니다. (2의 4승을 표현할 수 있기 때문)
16진법은 4개의 비트 값을 "한번"에 표현할 수 있다는 점을 확인해주세요.
16진법을 사용하는 이유
바이트가 커질 때 2, 10, 16진법 범위를 보게되면 아래와 같습니다.
2진법은 바이트가 늘어남에 따라 자릿수가 기하급수적으로 늘어나는 단점이 존재하며, 사람은 10진수에 익숙하기 때문에 2진수로 적힌 값이 10진수로 얼마인지 직관적으로 파악하기 어렵습니다.
0b1111101000은 10진수로 얼마인가? -> 1000
반대로 10진법은 바이트마다 떨어지는 단위가 깔끔하지 않습니다.(255, 65535, 4294967295...) 또한 1000이라는 수는 2 바이트로 저장되는데, 만약 바이트 단위로 나눠 10진수로 표현할 때 문제가 발생합니다. (10진수는 바이트 단위로 나눠 떨어지는 값이 아니여서)
다만, 2바이트를 몫과 나머지로 표현한 그림을 보고 1000이라는 것을 직관적으로 이해할 사람은 거의 없을 겁니다.
마지막으로 16진법은 1바이트(8비트)마다 FF 단위로 증가하고 자릿수 또한 다른 진법보다 적게 사용합니다.
물론 컴퓨터 내부는 2진법을 사용하고 사람이 프로그래밍을 하는 과정에서 16진법이 용이하다는 의미입니다.
1000을 2진수로 표현할 때 사람이 직관적으로 변환 할 수 없고 계산을 통해 0b1111101000임을 알 수 있습니다.
하지만 16진법은 0x3e8(1000)로 훨씬 짧게 표현할 수 있으며, 16진법은 자릿수가 4비트를 의미하기 때문에 아래와 같이 직관적인 2진법 변환 및 해당 값(1000, 0x3e8)이 2 바이트 크기를 갖는 걸 바로 파악할 수 있습니다. (16진수 자릿수는 4비트고, 1바이트는 8비트이기 때문에)
결론
16진수 하나가 2의 4승을 표현할 수 있기 때문에 2진법으로 15를 0b1111로 표현할 수 있지만, 16진법은 0xF로 훨씬 짧게 표현할 수 있습니다.
또한 데이터를 저장하기 위해 몇 바이트가 필요한지 또는 사람이 2진법으로 변환할 때 별다른 계산없이 값을 직관적으로 구할 수 있습니다.
즉, 16진법은 사람과 기계 사이의 해석을 용이하게 하기 위해 사용하는 방법입니다. (사람 <-> 16진법 <-> 기계)
댓글
댓글 쓰기