5

我正在学习 ARM,所以回到二进制/十六进制算术的基础知识,这让我想到了二进制数通常如何以 4 个一组的形式呈现,例如

1111 1110 1101 1100

这样做有什么特别的原因吗?看到我们通常用位/字节/兆字节等来描述内存,我认为它们最好按 8 分组?

4

3 回答 3

7

一个原因是表示和转换为十六进制变得容易。一个十六进制数字由(表示)4 位组成。

在此处输入图像描述

于 2020-07-14T18:18:53.497 回答
4

所以八进制很常见,可能有多种原因,请理解这是一个主要基于意见的问题,因此没有正确答案(最接近的是“因为其他人都这样做,这就是我学到的”)。

以 10 为底,十进制,我们知道,我们有 10 个手指,10 个脚趾,我们为这 10 个数字创建了 10 个我们识别的符号。

以二为底很麻烦,我们倾向于重复使用十进制数字 0 和 1,但以二为底,所以它是两个符号。

以 8 为基数的八进制是表示二进制的一种自然方式,因为它不需要那么多数字,任何 2 的幂都可以。base 4 并没有给我们带来太多,但 base 8 开始了。像 DEC 这样在当时相当占主导地位的公司使用八进制,所以那个时期那些机器上的人不得不说八进制。八进制也比十六进制有优势,它只需要 8 个符号,我们可以像基数 2 一样,重新利用十进制数字 0-7。在你的脑海中,在二进制和八进制之间转换需要记住的东西的一半。

但八进制是 2 个 3 位的奇异幂。四也是二的幂,可能由于各种原因,字节的大小(即使在 DEC 天)被吸引到 8 位(一个字节的大小范围很广,并不总是 8 并且可能仍然不在一些遗留系统),也许 128 不够大,而 512 太大,或者因为 2 的幂 2 的幂更有意义。所以自然而然地,十六进制就不适用了,毫无疑问,计算机人员已经习惯于将自己从 10 进制中移除并能够在其他进制中思考,现在从字母表中窃取来填充剩余的 6 个符号,记住更大的表格,等等. 已成为常态。你仍然看到八进制,C 和其他语言仍然支持它,gnu 工具的 pdp11 后端在十六进制中感觉不对,但它就是这样,他们可以轻松制作反汇编程序,

再次没有正确的答案,因为它真的不可能确认。但与其他事物一样,毫无疑问,在正确的历史时期,当正确的事物被创造出来时,例如,有人决定制造一些 ram 芯片来出售,或者他们做出了选择(4 位、8 位、9位,16 位 18 位)或者他们坐在一个房间里并决定我们只追求一个产品线,就是这样,然后如果这是你可以花大价钱购买的唯一 ram,那就是 8 位您的 9 位处理器意味着您的客户必须为 ram 支付更多的钱,因为他们可能需要两个芯片并做 8+1 或 4+5 的事情或其他任何事情。和/或这些产品和特定的产品卖得更好。

为什么仍然有 x86 处理器可以构建更高级的处理器,更便宜,运行更快,功耗更低等等。不是因为 x86 更好,而是因为多个其他因素,包括你知道的魔鬼与你不知道的魔鬼. 当有非常好的替代品时,为什么窗户仍然存在?为什么你得到的 Mac 价格如此高昂?不是因为它是对的,不是因为技术,而是因为包括情感在内的多种因素的组合。

如果你有幸与八进制时代的人们一起工作,看看他们是如何与十六进制斗争的,那么你自己就是被十六进制所培养的,对于大多数人来说,即使他们尝试过,也会与八进制斗争,这也是其中很大一部分。这是你被教导的,这是你所知道的。你的老师会说这是他们所学的和他们所知道的,也许三代人可能会回到我们能负担得起的东西上,我们学会了我们买的东西,卖掉它的人就是这样做的。

我认为很明显,二进制既不高效也不容易且容易出错。八进制和十六进制都可以正常工作,基数 32 和基数 64 一样麻烦,因此基数 8 或基数 16 处于最佳位置,可以说基数 16 获胜。

请注意,由于字节通常是 8 位,因此我们经常使用两个十六进制数字将事物分组为字节。记住 256 个符号,在我们以某种方式创建 256 个符号之后会破坏交易,您不会得到任何采用。

于 2020-07-14T20:41:36.503 回答
4

分组通常可以从 4 位(一个半字节)更改为 8 位(一个字节)或 16 位(一个字)或 32 位(一个双字)。
值经常分组为 4bit 部分的原因是 4bit 可以表示为十六进制数:

所以

1111 1110 1101 1100    can be represented as
F    E    D    C       in hexadecimal

在 hexdump 中,这 2 个字节也可以FEDCbig-endianCDEFlittle-endian 表示。在基于 BYTE 的系统中,一个 8 位值由两个称为半字节的 4 位值组成。上面的值可以像这样FE DC或分开CD EF

于 2020-07-14T18:19:41.970 回答