【问题标题】:Moving between hexadecimal and binary notation在十六进制和二进制符号之间移动
【发布时间】:2013-07-28 16:22:06
【问题描述】:

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

00101010

可以用十六进制表示法和二进制表示法的混合表示,方法是取左边 0010 的 4 位数字,并将该序列表示为十六进制中的 2。我理解,因为 0010 等于 32,并且当您使用以 16 为底的十六进制表示法时,等于 2。

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

将相同的概念应用于 8 位序列的左侧,您不应该将骑行侧 10 除以 2,因为二进制表示法使用 2 的幂,就像您将左侧除以16,因为您使用的是具有 16 次幂的十六进制表示法?我想错了吗?

【问题讨论】:

  • Jongware 很难选择最佳答案,因为两者都非常好,但我不得不选择一个。

标签: hex


【解决方案1】:

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

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

所以,以 10 为底,就是 32 + 8 + 2 = 42。

如果我们将 8 位字节分成两个 4 位 nybbles,那么您就有

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。

【讨论】:

  • 谢谢。这似乎是一个非常简单的概念。我不知道我为什么这么困惑。
  • 就像在大十进制数字中一样,其中每个下一个数字(从右到左)代表 10 的下一个幂,在十六进制中,您按 16 秒计数。第一步是“1”(16 的 0 次方),然后是 16。接下来,对于 100 的十六进制值将是 256 -- 16*16 -- 然后,对于 1000 4,096 -- 16* 16*16。以此类推。
【解决方案2】:

将二进制转换为十六进制时,左 4 位与右 4 位得到相同的处理。 “二进制到十六进制”所做的只是用单个十六进制数字替换 任何 4 位序列 - 在那个阶段您不必担心转换为“完整”数字。 p>

您的示例 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

依次将其转换为十进制也与十进制相同,只是现在每个“数字”代表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

【讨论】:

  • 感谢您的意见。在了解如何正确分解和解释每个 4 位数字后,这个概念就很简单了。
猜你喜欢
  • 2014-10-30
  • 2023-03-22
  • 2018-01-16
  • 1970-01-01
  • 2010-10-23
  • 2018-08-26
  • 1970-01-01
  • 2023-04-05
  • 2011-10-01
相关资源
最近更新 更多