옛날 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 문자 두개를 사용하여 완전하게 나타낼 수 있기 때문에 매우 간편해지게 된다.
Photo 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학번
참고로 저는 컴공과는 아닙니다 ㅋㅋㅋㅋ