2

When one byte is represented by 8 bits in binary notation you have a sequence of 8 possible 1's and 0's. So 00101010 can be shortened to 2A using hexadecimal notation. My book says you can shorten that representation by using hexadecimal after the 4th place from the right. For example...

00101010

can be represented with a mix of hexadecimal notation and binary notation by taking the 4 digits on the left 0010 and and representing that sequence to equal 2 in hexadecimal. I understand because 0010 equals 32 and when you are using hexadecimal notation that has a base of 16 that equals to 2.

What I don't understand is how the right side of the sequence is represented. My book says 1010 can be represented by the letter A which equals to 10. 1010 in binary notation equals 8 + 2 = 10. Here is the issue I'm having.

Applying the same concept to the right side as the left side of the 8 bit sequence shouldn't you divide the ride side 10 by 2 since binary notation is using the power of 2 like you divided the left side by 16 since you're using hexadecimal notation which has the power of 16? Am i thinking about it wrong?

4

2 回答 2

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 位 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。

于 2013-07-29T01:05:53.550 回答
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。

因此,十六进制表示1010A; 并且您的二进制数转换为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
于 2013-07-29T01:10:43.340 回答