八进制数(以8为底)有什么用?


11

Java提供了以2、8、10和16为基数编写数字文字的方法。

我想知道为什么包括基数8,例如int x = 0123;

我认为可能存在类似于十六进制的一个字节的容量为FF + 1的事实,依此类推。


7
我相信您的问题是“八进制数用于什么?”
GetMeARemoteJob

是的,这就是我应该如何措辞的问题。感谢所有有趣的答案。我以为它可能具有历史基础,但是我没有必要的经验来指责它。
jokinjo

Answers:


16

这个答案是针对最初的问题写的:“为什么以8为底的数字是有用的?”

这是为了让熟悉C等语言的人熟悉该语言。然后问题是为什么要在那些语言中支持它!

有些架构(各种PDP)使用18位宽的字(其他使用36位字),因此数字为3位宽的文字将很有用。

实际上,我在Java代码中看到的唯一地方是用于指定unix样式的权限,例如07770644等等。

(为什么支持它的嘲讽式回答是“ 对此问题进行投票”)。


哦,很好,我忘记了Linux中的文件权限!尽量少使用可用位...八进制很合适。
sarlacii

1
@sarlacii的“最小使用”与它无关,int文字的“八进制”性质仅存在于源代码中。使用八进制文字表示的权限更容易,因为这些数字直接对应于用户,组和其他。
安迪·特纳

我在具有60位字和6位字符集的大型机上进行了第一次编程。地址为18位。当然,我们使用八进制。当我第一次遇到十六进制时,看到一个数字是很奇怪的。
Ole VV

@Andy我仍然认为它是最少使用的...位长的选择不仅与代码有关。它也受到资源的限制。例如。我可能选择使用8位来编码每个权限,掩盖未使用的位,需要3个字节,或者使用最小的3位,然后编码八进制数,以仅使用1个半字节(使用第4个字节)有点粘)。但是,是的,一旦您达到位级别,它是任意的……因为无论如何您都可以将组合的八进制值读取为十六进制。
sarlacii

7

“八进制数不像以前那样普遍。但是,八进制数用于一个字中的位数是3的倍数的情况。它还用作表示UNIX系统上文件许可权和表示形式的简写形式。 UTF8数字等。”

来自:https : //www.tutorialspoint.com/octal-number-system


3
并不是真正的“单词中的位数”,因为它在16位小型计算机上以高位0/1然后是8个八进制数的形式使用。更好的描述可能是:当单词中字段的大小是8位的倍数时使用。那些相同的计算机(通常)有8个寄存器-因此,指令中指定的寄存器将具有3位字段来命名寄存器,寄存器到寄存器指令将具有两个此类3位字段;这些相同的计算机通常具有3位操作码,或3位操作码,其后带有“转义符”(例如0111)到6位操作码;等等等等
davidbak

4

计算机(科学)的历史性。为了表示位组合,基数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位和寻址)。


0

“八进制数(以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


1
我喜欢阅读Wikipedia条目,特别是关于用手指间的空格进行计数的一点。但是,在大多数情况下,这篇文章可以说是我提出这个问题的动力。正如我所怀疑的那样,当前计算机体系结构中使用的字大小不可分割,使得八进制表示形式就没有用了,您引用为“ 16位,32位,64位单词……”的段落之一也根本不清楚。您能否解释一下“最高有效字节被抹写在四个八进制数字上”和“某些具有二字幂的平台仍具有指令子字……”
jokinjo
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.