我从未在我的代码中使用过八进制数字,也没有遇到任何使用它的代码(尽管十六进制和位操作除外)。
我大约于1994年开始学习C/C++编程,所以可能对此太年轻了?早期的代码使用八进制吗?C语言通过在数字前添加0来支持这些数字,但是有哪些代码使用这些八进制数字字面量呢?
我最近必须编写涉及3位二进制字段的网络协议代码。当你想要调试时,八进制会派上用场。
为了效果,您能告诉我这个字段的3位是什么吗?
0x492492
另一方面,这个数字在八进制中表示为:
022222222
现在,最终以二进制方式(每组三个):
010 010 010 010 010 010 010 010
在现今的技术领域,我只会在Linux文件权限位上遇到八进制字面值。通常,文件权限用3个八进制数字表示,每个数字分别代表文件拥有者、群组和其他用户的权限。
例如,0755(大部分命令行工具也可以简写为755)表示文件拥有者具有完全权限(读取、写入、执行),而群组和其他用户仅具有读取和执行权限。
用八进制表示这些位可以更容易地确定设置的权限。你可以一眼看出0755的含义,但并不清楚493或0x1ed表示什么。
来自维基百科
在八进制广泛用于计算机时,IBM主机等系统使用24位(或36位)字。对于这些机器,八进制是二进制的理想缩写,因为八个(或十二个)数字可以简明地显示整个机器字(每个八进制数字涵盖三个二进制数字)。此外,它通过允许使用Nixie管、七段显示器和计算器来省成本,用于操作员控制台;在那里,二进制显示器过于复杂,十进制显示器需要复杂的硬件来转换基数,而十六进制显示器需要显示字母。
然而,所有现代计算平台都使用16、32或64位字节,每个字节由8位组成。在这样的系统上,需要三个八进制数字,最高有效八进制数字不太优雅地表示仅两个二进制数字(并且在一个系列中,相同的八进制数字将代表下一字节中的一个二进制数字)。因此,在编程语言中更常使用十六进制,因为一个十六进制数位涵盖四个二进制数位,所有现代计算平台都有可被四整除的机器字。一些具有2的幂次方字长的平台仍然有指令子字,如果以八进制显示,则更容易理解;这包括PDP-11。现代普及的x86架构也属于这个类别,但在这个平台上几乎不使用八进制。
-亚当
我从没在我的代码中使用过八进制数,也没有遇到过使用它的任何代码。
我敢打赌你用过。根据标准规定,以零开头的数字字面量是八进制的。这包括了常见的0
。每次你使用或者看到字面量的零,它就是八进制的。奇怪但是真实。 :-)
0
明确列为八进制常量。此外,十进制常量不能以零开头。您可以在网上查看此标准的草案这里。 - Tim商业航空使用八进制“标签”(基本上是消息类型ID)在古老的Arinc 429总线标准中。因此,在编写航空电子应用程序时能够以八进制指定标签值是很好的...
我也看到过八进制在飞机应答器中的使用。模式3a应答器代码是一个12位数字,每个人都将其处理为4个八进制数字。在维基百科上有更多信息。我知道这与计算机通常无关,但美国联邦航空局也使用计算机 :)
在Unix领域中,chmod
和mkdir
函数非常有用,但除此之外,我想不到任何其他常见的用途。
没有世俗的理由去修改一个追溯到语言诞生并存在于无数程序中的标准。我还记得ASCII字符的八进制值,想起A的十六进制值需要思考一下,但它在八进制中是101;数字0是060... ^C是003...
也就是说,我经常使用八进制表示法。
如果你真的想挑战自己,看看PDP-10的单词格式吧...
我是通过PDP-11接触到Octal的,而C语言似乎也是如此 :)
仍然有一堆老的过程控制系统(如Honeywell H4400,H45000等)存在于60年代末和70年代,它们使用24位字及八进制寻址。想想在美国建造最后一个核电站的时间就是一个例子。
更换这些工业系统是一个相当大的工程,因此您可能很幸运在野外遇到其中一个,然后对其壮丽的自定义浮点格式感到惊叹!
if (b < 0) b = 0;
- pmg0o1234
,而旧的01234
形式会导致语法错误。 - glglgl