Answers:
这个答案是针对最初的问题写的:“为什么以8为底的数字是有用的?”
这是为了让熟悉C等语言的人熟悉该语言。然后问题是为什么要在那些语言中支持它!
有些架构(各种PDP)使用18位宽的字(其他使用36位字),因此数字为3位宽的文字将很有用。
实际上,我在Java代码中看到的唯一地方是用于指定unix样式的权限,例如0777
,0644
等等。
(为什么支持它的嘲讽式回答是“ 对此问题进行投票”)。
“八进制数不像以前那样普遍。但是,八进制数用于一个字中的位数是3的倍数的情况。它还用作表示UNIX系统上文件许可权和表示形式的简写形式。 UTF8数字等。”
计算机(科学)的历史性。为了表示位组合,基数10不适合,基数8 = 2 3表示3位,而基数16 = 2 4表示4位更好。
以8为底的优势是所有数字都是真实数字:0-7,而以16为底的“数字”为0-9A-F。
对于8位字节,基数16(十六进制)更合适,并且胜出。对于Unix base 8八进制,通常仍rwx
用于用户,组和其他用户的位(读,写,执行)。因此八进制数字,例如0666或0777。
十六进制无处不在,尤其是由于当今计算机的字长是多个字节。8位byte
成为标准是另外一个棘手的相关故事(2 3位和寻址)。
“八进制数(以8为底)用于什么”的原始答案?
作为二进制的缩写:对于计算机(例如UNIVAC 1050,PDP-8,ICL 1900等),八进制已被用作二进制的缩写,因为它们的字长可被三除(每个八进制数字代表三个二进制)数字)。因此,两个,四个,八个或十二个数字可以简洁地显示整个机器单词。它还允许将Nixie管,七段显示器和计算器用于操作员控制台,从而降低了成本,因为二进制显示太复杂而无法使用,十进制显示需要复杂的硬件来转换半径,而十六进制显示则需要显示更多的数字。 。
16位,32位或62位字表示:所有现代计算平台都使用16位,32位或64位字,并进一步分为8位字节。在这样的系统上,每个字节需要三个八进制数字,其中最高有效八进制数字表示两个二进制数字(如果有的话,再加上一个下一个有效字节的一位)。16位字的八进制表示形式需要6位数字,但是最高有效的八进制数字表示(非常不优雅)仅一位(0或1)。此表示法无法轻松读取最高有效字节,因为它被抹写在四个八进制数字上。因此,由于两个十六进制数字正好指定一个字节,因此十六进制在当今的编程语言中更常用。某些具有2的幂的字长的平台仍然具有指令子字,如果以八进制显示,这些指令子字更容易理解;其中包括PDP-11和Motorola 68000系列。当今无处不在的x86架构也属于此类,但是八进制很少在此平台上使用。
编码说明:当以八进制显示时,现代x86架构中操作码的二进制编码的某些属性变得更加明显,例如ModRM字节(分为2、3和3位字段),因此八进制可用于描述这些编码。
计算和文件访问权限:八进制有时用在计算中,而不是十六进制,也许在现代最常与Unix系统下的文件权限结合使用(在对chmod的访问权限中)。它的优点是不需要任何额外的符号作为数字(十六进制为16,因此需要0–9之外的六个其他符号)。
数字显示:八进制数字还用于在屏幕上显示数字内容,因为它具有较少的表示符号。
字节字符串的图形表示:某些编程语言(C,Perl,Postscript等)用八进制表示文本/图形,并以\ nnn进行转义。对于UTF-8的非ASCII字节,八进制表示特别方便,该字节对6位的组进行编码,并且任何起始字节的八进制值均为\ 3nn,而任何连续字节的八进制值均为\ 2nn。
早期的浮点算法:八进制还用于Ferranti Atlas(1962),Burroughs B5500(1964),Burroughs B5700(1971),Burroughs B6700(1971)和Burroughs B7700(1972)的浮点运算中。
在“应答器”中:飞机发射一个代码,当被地面雷达询问时,该代码表示为一个八进制数字。该代码用于区分雷达屏幕上的不同飞机。
进一步的阅读:https : //en.wikipedia.org/wiki/Octal