八进制数字文字:什么时候?为什么?自从?

Jar*_*ike 47 c numbers

我从来没有在我的代码中使用八进制数字,也没有遇到任何使用它的代码(尽管有十六进制和bit twddling).

我在1994年开始用C/C++编程,所以也许我太年轻了?旧代码使用八进制吗?C包含对这些的支持,前缀为0,但使用这些基数为8的数字的代码在哪里?

Ben*_*ins 46

我最近不得不编写访问3位字段的网络协议代码.当您想要调试时,Octal会派上用场.

只是为了效果,你能告诉我这是什么3位字段吗?

0x492492
Run Code Online (Sandbox Code Playgroud)

另一方面,八进制中的相同数字:

022222222
Run Code Online (Sandbox Code Playgroud)

现在,最后,以二进制(以3为一组):

010 010 010 010 010 010 010 010
Run Code Online (Sandbox Code Playgroud)

  • @mirabilos 这是一个非常广泛的声明。没有理由将字段长度锁定为 4 位或 8 位的倍数——事实上,排除其他长度会导致协议中的大量开销。也许对于一些无关紧要的应用程序,但是支持性能真正重要的应用程序的协议呢?在这些情况下,当 3 位字段可以时,您不会选择 4 位字段。 (2认同)

Chr*_*Lee 34

这几天我唯一遇到八进制文字的地方是处理Linux中文件的权限位,通常表示为3个八进制数字,其中每个数字分别代表文件所有者,组和其他用户的权限.

例如0755(对于大多数命令行工具也只是755)意味着文件所有者具有完全权限(读取,写入,执行),并且组和其他用户只具有读取和执行权限.

以八进制表示这些位可以更容易地确定设置的权限.您可以一眼看出0755的含义,但不是493或0x1ed.


Ada*_*vis 28

来自维基百科

当八进制最初被广泛用于计算时,诸如IBM大型机之类的系统使用24位(或36位)字.Octal是这些机器的理想二进制缩写,因为八(或十二)个数字可以简洁地显示整个机器字(每个八进制数字覆盖三个二进制数字).它还通过允许Nixie管,七段显示器和计算器用于操作员控制台来降低成本; 在二进制显示太复杂而无法使用的情况下,十进制显示需要复杂的硬件来转换基数,以及显示字母所需的十六进制显示.

然而,所有现代计算平台都使用16位,32位或64位字,其中8位构成一个字节.在这样的系统上,将需要三个八进制数字,最重要的八进制数字不仅仅代表两个二进制数字(并且在一系列中相同的八进制数字将代表来自下一个字节的一个二进制数字).因此,十六进制在今天的编程语言中更常用,因为十六进制数字覆盖四个二进制数字,并且所有现代计算平台都具有可被4整除的机器字.一些具有二次幂字大小的平台仍然具有指令子字,如果以八进制显示则更易于理解; 这包括PDP-11.现代无处不在的x86架构也属于这一类,

-亚当


Tim*_*Tim 23

我从来没有在我的代码中使用八进制数字,也没有遇到任何使用它的代码.

我打赌你有.根据标准,以零开头的数字文字是八进制的.这包括,平凡的,0.每次使用或看到字面零时,这都是八进制的.奇怪但真实.:-)

  • 我想你可能弄错了.ISO/IEC 9899:201x的6.4.4.1节规定了文字常量可以采用的形式,并且`0`明确地列为八进制常量.此外,十进制常量不能以零开头.您可以在线[此处]查看此标准的草稿(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf). (5认同)
  • 事实并非如此.Octal以'0'作为指示符开始.就像'0x'不是有效数字一样,'0'不是八进制数.'00'是. (2认同)
  • @LucBloom`0`实际上是**八进制的。请参阅[0是十进制文字还是八进制文字?](/sf/ask/482686571/) (2认同)
  • 我们可以说文字 0 根据词法定义只是八进制,但实际上数字 0 是同时以所有可能的基数表示的。或者也许都没有。 (2认同)

小智 8

商用航空在古老的Arinc 429总线标准中使用八进制"标签"(基本上是消息类型ID).因此,在为航空电子应用程序编写代码时能够以八进制指定标签值很好......


Joh*_*her 6

我也看到八进制用于飞机转发器.模式-3a转发器代码是一个12位数字,每个人处理4个八进制数字.有关维基百科的更多信息.我知道它通常与计算机无关,但FAA也使用计算机:).

  • 我认为这样做是为了几十年前的航空电子设备的利益,您将代码放在四个指轮上,这些指轮直接将 12 位值编码为简单的数字逻辑以进行顺序传输。不涉及微处理器,因为他们没有微处理器(或者不希望航空电子应用程序变得复杂)。 (2认同)

Gre*_*ill 5

它是有用的chmod,并mkdir在Unix的用地功能布局,但除了我想不出任何其他常见的用途.