컴퓨터 메모리를 16진수로 표시하는 이유(0x01?)
Programming

컴퓨터 메모리를 16진수로 표시하는 이유(0x01?)

일시불

옛날 CPU는 정보를 처리하기 위한 최소 단위를 8비트(8bit)로 정하고 이것을 1바이트(1Byte)로 정의했다. 1바이트를 바이너리로 표시하면 다음과 같은데,

1111 1111

총 8자리기 때문에 표현할 수 있는 수의 가짓수는 총 256가지가 된다. 이를 16진수로 표현하면 0xFF와 같이 나타낼 수 있게 된다. 16진수 표기법은 1부터 9까지는 10진수와 같지만 10부터 16까지를 알파벳으로 나타내는데, 예를 들어 11은 A, 13은 C, 16은 F로 나타내는 것이다. 다시 말하면 1바이트를 16진수로 표현하면 16 문자 두개를 사용하여 완전하게 나타낼 수 있기 때문에 매우 간편해지게 된다.

16189158708_987f57e162_cPhoto by Zachary Cutlip

만일 2바이트를 표현한다면 0x0000부터 0xFFFF로 표현하면 되고, 바이트 수가 늘어나도 가장 큰 주소값은 0xFF...FF처럼 나타날 것이기 때문에 일관성 있는 메모리 주소의 작성이 가능해지는 장점이 있다.

만일 주소를 10진수로 표현하면, 1바이트는 0 ~ 256이고, 2바이트는 0~65535, 3바이트는 16777216이다. 자릿수도 급격하게 증가할 뿐더러 메모리 주소에 일관성이 없어진다. 이런 이유로 16진수로 메모리 표기를 하는 것이 관용적으로 굳어지게 된 것이다.

이런 이유에서 C/C++에서도 2진수 표현은 지원하지 않는 대신 16진수 표현인 %x로 메모리 주소를 표현하게 하고 있는 것이다. 여담이지만 우리 학교 컴공과 학생들은 과잠에 학번 표기를 다음과 같이 하고 다녀서 재미있었다. 컴공과가 아니면 무슨 표현인지도 모르겠지만...

0x0A // 10학번

참고로 저는 컴공과는 아닙니다 ㅋㅋㅋㅋ