应的。如果我们将16位二进制数直接表示为八进制会得到如下结果:
$$
\underbrace { { \downarrow } { \theta } 1 } _ { 3 } \underbrace { { \theta } { \theta } 1 } _ { 1 } \underbrace { 1 1 } _ { 7 } \underbrace { { \theta } { \theta } 0 } _ { 0 } \underbrace { 1 { \theta } 1 } _ { 5 }
$$
如果我们把这个16位二进制数平分为两个字节并将其分别表示为八进制数会得到如下所示的不同结果:
$$
\underbrace { 1 } _ { 2 } \underbrace { 1 } _ { 6 } \underbrace { 1 } _ { 3 } \qquad \underbrace { 1 } _ { 3 } \underbrace { 1 } _ { 0 } \underbrace { 1 } _ { 5 }
$$
为了使多字节值能和分开表示的单字节值取得一致,我们需要一种可以等分单个字节的系统,按照这种思想,我们可以把每个字节等分成4组,每组2比特(基于4的计数系统);还可以等分为2组,每组4比特(基于16的计数系统)。
基于16的计数系统(Base16),对于我们而言是一种全新的系统。基于16的计数系统也被称为十六进制(hexadecimal),这个单词很容易让我们产生混淆。这是因为很多以hexa-为前缀的单词(比如 Hexagon,Hexapod 以及 Hexameter)都会与 6或多或少有些联系。而hexadecimal这个词却偏偏代表了16(Sixteen)这个含义。虽然在《微软出版物风格与技术手册》(The Microsoft Manual of Style for Technical Publications)中明确说明“请勿将十六进制缩写为hex”,但包括我在内的绝大多数人还总是在不经意间使用这种缩写。
十六进制还有其他一些特别之处。比如在十进制中,我们通常可以用下面这种方式计数:
$$
0 \ 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9 \ 1 0 \ 1 1 \ 1 2 . . .
$$
我们仔细回忆一下在八进制中,8和9这两个数字是不需要的,就像下面这样:
$$
0 ~ 1 ~ 2 ~ 3 ~ 4 ~ 5 ~ 6 ~ 7 ~ 1 0 ~ 1 1 ~ 1 2 . . .
$$
同理,四进制计数中我们也不需要4、5、6、7这些数字,就像下面这样:
$$
\smash { 0 \uparrow 2 3 1 0 1 1 1 2 \ldots }
$$
在二进制中,这一切变得更加简单,我们所需要的只有0和1:
$$
0 \mid 1 0 1 1 1 0 0 \ldots
$$
十六进制计数和上面所讲的这一系列情况是完全不同的,它需要比十进制更多的数
15 字节与十六进制
189