在十六进制和二进制表示法之间移动

时间:2013-07-29 00:48:02

标签: hex

当一个字节由二进制表示法的8位表示时,您有一个8可能的1和0的序列。因此,00101010可以使用十六进制表示法缩短为2A。我的书说你可以在右边第四个位置后使用十六进制来缩短表示。例如......

通过取左边的0010上的4位数字并用十六进制表示该序列等于2,可以用十六进制表示法和二进制表示法的混合来表示。我理解,因为0010等于32,当你使用十六进制表示法时,其基数为16,等于2.

我不明白的是如何表示序列的右侧。我的书说1010可以用字母A表示,它等于10. 1010的二进制表示法等于8 + 2 = 10.这是我遇到的问题。

在8位序列的左侧应用相同的概念不应该将乘坐侧10除以2,因为二进制表示法使用的是2的幂,就像你左边划分的那样因为你使用16位幂的十六进制表示法,所以16乘?我在想它错了吗?

2 个答案:

答案 0 :(得分:2)

让我们从完整的8位字节开始,在每个数字下写下位值:

0 0 1 0 1 0 1 0
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
↓ ↓ ↓ ↓ 8 4 2 1
↓ ↓ ↓ 16
↓ ↓ 32
↓ 64
128

因此,在基数10中,这是32 + 8 + 2 = 42。

如果我们将8位字节分成两个4位可见光,那么

0 0 1 0  1 0 1 0
↓ ↓ ↓ ↓  ↓ ↓ ↓ ↓
8 4 2 1  8 4 2 1

你会注意到每个4位的nybble可以保存0到15之间的值。所以nybbles可以代表两个十六进制数字。

当我们计算它们的值时,我们以相同的方式对待这两个nybbles。从左到右,每个nybble中的数字的位置值为8,4,2,1。因此上(左)nybble的值为2,而下(右)nybble的值为8 + 2 = 10正如您所写,十进制数10以十六进制写为A,因此十六进制字节写为2A

但请记住,这是十六进制的。因此,地方值是16的幂:

2 A
↓ ↓
↓ 1
16

因此,转换回十进制,2A = 2×16 + 10 = 32 + 10 = 42。

答案 1 :(得分:1)

将二进制转换为十六进制时,左边的4位与右边的4位进行相同的处理。所有“二进制到十六进制”都是用一个十六进制数字替换任何 4位序列 - 在那个阶段你不必担心转换为'完整'数字。

您的示例00101010可以分为两个4位序列:00101010。将这些中的每一个转换为十六进制是通过从右到左将它们相加,将每个下一位乘以2来完成的。这完全你在base-10中吃过的东西;值532表示“10 ^ 0 * 2 + 10 ^ 1 * 3 + 10 ^ 2 * 5”(其中^是“power of”的通常速记)。所以,对于你得到的前4位

0*1 + 1*2 + 0*4 + 0*8 = 2

和第二组4位

0*1 + 1*2 + 0*4 + 1*8 = 10

以十六进制表示,0到15之间的每个值都由一个“数字”表示,我们在9处用完一位数。所以从10开始,我们使用A,B,C,D,E和F表示十进制值10,11,12,13,14和15。

因此,1010的十六进制表示为A;并且您的二进制数转换为2A

将此转换为 decimal 再次也与十进制相同,只是现在每个'数字'代表 16 的下一个幂。所以评估为

16 * 2 + 1 * A

或(十进制)

16 * 2 + 1 * 10 = 42

您可以通过将所有二进制数加起来来验证这是与起始二进制文件00101010相同的十进制值:

 1 * 0
 2 * 1
 4 * 0
 8 * 1
16 * 0
32 * 1
64 * 0
128 * 0