为什么八进制和十六进制?计算机使用二进制和人类小数


16

为什么我们使用其他既不是二进制(对于计算机)也不是小数(对于人类)的基数?

计算机最终以二进制形式表示它们,而人类强烈希望获得其十进制表示形式。为什么不坚持这两个基础?


我倾向于认为没有充分的理由使用十六进制或带有大量字形的数字作为数字。更甚者,我倾向于认为二进制rep将来可以代替其他表示法。
Mikhail V

@MikhailV十六进制表示比二进制表示更简洁。我会说这是一个非常坚实的理由使用比,说一个较大的数字的字形,2
本·琼斯

Answers:


19

八进制(base-8)和十六进制(base-16)数字是大多数人使用的二进制(base-2)系统计算机和十进制(base-10)系统之间的合理折衷。

计算机不善于使用多个符号,因此以2为基数(您只有2个符号)适合它们,而较长的字符串(数字多的数字)的问题就少了。人类具有多个符号非常好,但是记住较长的字符串却不好。

八进制和十六进制具有人类优势,它们可以使用许多符号,同时仍可以轻松地在二进制之间来回转换,因为每个十六进制数字代表4个二进制数字(),每个八进制数字代表3(8 = 2 3)。我认为十六进制胜过八进制,因为它可以轻松地用于表示字节和16/32/64位数字。16=248=23


8
例如,考虑RGB的十六进制值。容易记住白色是#FFFFFF。很难记住白色是十进制的16777215。您要删除#EF439A的红色部分吗?您得到#00439A,即只需将前两位数字更改为0。用十进制表示,您必须减去15663104。祝您好运。
jmite 2014年

3
准确地说,十进制表示法的颜色将使用三元组,而白色将是(255,255,255)。我们将十六进制值串联起来只是因为它们始终是2位数字。我们可以对小数使用0来做同样的事情,那么白色将是255255255而不是16777215。–
Spidey

@Spidey确实如此。而且,我的大脑可以更轻松地解析(127,255,255)之类的东西,甚至可以猜测颜色的外观,因为我可以看到墨水量的比例,而不必以十六进制的形式计算出来。
Mikhail V

13

我们为了方便和简洁而使用它们。

十六进制和十进制确实是二进制的出色压缩表示形式。十六进制尤其适合于压缩形式的内存地址。每个八位数字直接映射到3个二进制位,每个十六进制数字映射到4个二进制位。这是由于基数(8和16)是2(2 4)的幂。例如,我可以将二进制01101001编写为十六进制69,或者将其扩展为前导零(如oct 151)23240110100169151

因此,假设您需要64位内存地址。您可以查看所有64个二进制位,或者将其压缩为16个十六进制数字。通常,您不需要比较几个地址即可查看它们是否相同或相邻。您希望查看64位还是16位?


5
八进制的好处是不添加任何数字符号,并且在使用6位字符(和常见的非2的幂的单词,例如12位PDP-8、18位PDP- 1 [CDC 6x00的地址寄存器],36位PDP-6,CDC 6x00的60位操作数寄存器)。八进制字符/字节和2的幂的移动使十六进制更具吸引力。
Paul A. Clayton

“您愿意看一下64位还是16位?” 当然,我会看一下分组的位。但是请不要使用“ 01”表示法,这很丑陋,并且伤害了我的眼睛。而且我什至不告诉我十六进制对我的眼睛有多大伤害。
Mikhail V

@MikhailV:“ 01”符号是什么意思?您说您宁愿查看位,但不要查看“ 01”表示法,然后使用什么表示法。如果您说十六进制会伤害您的眼睛,我不禁会以为您可能对十进制的练习比对十六进制的练习多了一些。(实际上我以为是(独奏)性爱对您的眼睛
有害

我更喜欢dtech,因为它强调易用性,因为它强调易用性,但是您可能已经指出,不仅数字表示形式更短,而且数字种类繁多,在读取十六进制或十六进制数字时更容易知道您的位置。八进制。
PJTraill

@ PaulA.Clayton:好点;PDP-11的另一个优点是,即使字(自然运算单位)为16位,大多数指令代码自然也可以归为2位运算和四个3位组,分别代表寄存器号和地址模式,两者均具有两种论据有8种可能性。我的最爱:014747 = MOV-(PC),-(PC),它会自己填充内存(如果允许)。
PJTraill


2

介绍

正如其他答案已经提到的,出于不同的目的和约束,可能会有不同的符号。记号实际上是一种编码为字符序列的编码,从对算法和数据结构的研究中我们知道,根据我们想对它进行处理,可以采用多种方法对抽象概念(例如列表或集合)进行编码。在这种情况下,主要是算法上的方便。

考虑数字表示时,同样适用。尽管在某些应用程序中可以使用陌生的表示形式,但在计算机内部,所有内容都是最低级别的二进制文件。

在计算机外部,我们使用任何人类可以理解的表示形式,具体取决于人类对表示的价值类型的方便程度。二进制表示形式通常太长且结构不清晰,以致于无法轻松读取和写入,因此置于十六进制或八进制形式。选择通常可能与以二进制字构造信息的方式有关,不一定要代表数字。

但是,仅考虑数字(即数字表示)时,有必要查看其他数字表示系统以了解 主要因素是:生理,习惯和便利性。便利性当然是创造多样性的主要因素,因为它取决于使用环境。

更广泛的外观

2n

问题的主体似乎绝不限于计算机,人类已经并且仍在使用其他几种计数系统。其中一些甚至在计算机中使用,例如在处理长整数(更不用说非整数)时。

首先要说明的是,当人们以数千或数百万为单位时,仍将其视为十进制,因为它们的乘方为10。一个可能的原因可能是用于表示数字的符号数量(尽管这是有争议的问题,我们将在其他系统上看到)。

然后,对于人类,他们在基础5中使用了几种系统,称为 五进制系统。实际上,这些系统中的大多数都有两个基数,第二个是2或4,与基数5交替,这使它们等效于10(十进制)或20(十进制)。猜猜那是哪里来的:)

这些双基系统称为双五进制或四五进制系统。很少使用纯五元。

罗马数字可以看作是双五进制系统(这是如何使用它们进行算术的指示)。中国和日本的算盘使用双进制。玛雅人使用四元体。

使用系统的原因可能很多。一个很好的理由是它是第一个本地设计,并且人们现在已经习惯了。例如,您可能还会想知道为什么说英语的人在尝试测量距离时仍然使用极其奇怪的数字系统。您可能会争辩说这是多个单位的问题,而不是编号,但这是一个很微不足道的说法。数字主要用于衡量事物。

保持系统的其他原因是在给定上下文中的便利性。在不同符号的数量或算盘上的位置与形成足够大的数字所需的符号出现的数量之间可能需要权衡。Base 2使用2个不同的符号,但是有很多次出现,对于材料表示而言可能不方便。原始的以20为基数的数字将需要二十个符号,以及非常大的乘法表,人们不会记住。但是二元或四元系统更易于管理,尤其是构建算盘时。纯粹的五元系统可能会更好,但是它违反了基于生理的习惯和直觉。当我们不知道更好的情况时,能够用手指指点总是很高兴。

但这还不是全部。

一个非常古老且非常常见的系统是用于测量时间和角度的六进制系统(但我们知道,它们通过地球自转而相互关联)。它使用基数60,但不使用60个符号,因为这太多了。因此,它依赖于另一个系统来表示其合成符号(例如十进制)。

圆可分为与60度角相对应的6部分,这是用等边三角形最简单的方法。然后,每个度数是60分钟的弧度,每个度数分为60秒。

根据维基百科

它起源于公元前3世纪的古代苏美尔人,一直传到古代的巴比伦人,至今仍以修改后的形式用于测量时间,角度和地理坐标。

考虑到起源,这是一个非常方便的系统,而此时数学几乎还没有开始。60°角不仅易于绘制,而且60°有很多因素,因此它可以用整数除以多种方式,而没有余数。

12×5=60

但是还有其他方法可以达到60,例如巴比伦人的 the 氏三元体系

为什么我们仍然使用六进制系统。我想我们只是习惯了,我们可能有太多相互矛盾的问题,无法完全证明更改是合理的。

有趣的是,编号系统和单位系统之间存在许多相互作用。但这是可以预期的,因为度量是数字的主要角色。在内存大小十进制和二进制度量之间的对立中这是很明显的。


3
那可能是因为标题说“为什么是十六进制,八进制或十六进制?”
Fizz

1
@RespawnedFluff好话。然后我的提问可能会扩展到这个问题。我并不是说其他​​答案没意思。但是,更广泛的观点更好地显示了各种系统的可能动机。它支持一些已经给出的答案。动机基本上是习惯和便利。但是便利性很大程度上取决于上下文。内存大小二分法是最近创建的,确实说明了这一点。
babou 2015年

2
简洁是一种美德,这个问题不需要1000字的散文,也不是很相关。您也未能回答问题。
dtech

“当人们数以千计时,...,它仍然被认为是十进制的,因为它们是10的幂。因此,人们可能想知道为什么八进制或十六进制不应该仅仅视为二进制的变体。”因为数千只是对整数的省略。数字,通常为0。这与base-1000不同,后者会为每个数字0-999使用1000个不同的符号。
dtech

1
@dtech谢谢。我忘记了我通常在回答前的介绍或摘要。这导致我想到了一个重要的观点,而其他答案显然忽略了这一点。并非每个二进制字都旨在用作数字。试图扩大视野有助于发现问题。
babou 2015年

-1

计算机可以理解二进制数字,而二进制数字的权重为2的幂,因此,代表数字的数字位数可能会很大,具体取决于数字。

假设十进制的64位可以由7位表示,而要表示数字5000,则需要13位。

八进制和十六进制数系统是表示二进制数的紧凑方式


2
这个答案[What advantage is there to using a base different from ten or (a power of) two?]如何-或您如何解释Why not stick to [bases 2 and 10]???
灰胡子
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.