【问题标题】:BCPL octal numerical constantsBCPL 八进制数值常数
【发布时间】:2013-09-30 00:59:14
【问题描述】:

我一直在深入研究 BCPL 的历史,因为有人问我使用前缀“0x”表示十六进制数字的原因。

在我的搜索中,我偶然发现了对这个令牌背后历史的一个非常好的解释。 (Why are hexadecimal numbers prefixed with 0x?)

然而,从这篇文章中,引发了另一个问题:

对于八进制常量,BCPL 是使用8 <digit>(根据规范:http://cm.bell-labs.com/cm/cs/who/dmr/bcpl.pdf)还是使用#<digit>(根据http://rabbit.eng.miami.edu/info/bcpl_reference_manual.pdf),或者这两种语法在语言的不同实现中都有效吗?

我还能够在这里找到第二个答案,它使用了 # 语法,这进一步激发了我对该主题的兴趣。 (Why are leading zeroes used to represent octal numbers?)

非常感谢任何历史见解。

【问题讨论】:

标签: constants numeric bcpl


【解决方案1】:

BCPL 中的语法有许多细微的变化。

例如,虽然我们使用的单元有 16 位单元(因此 x!y 为您提供来自 x + y 字地址的 16 位 (字地址是一半字节地址),我们还需要从 byte 地址和字节值中提取(因为我们主要在 6809 字节可寻址 CPU 上创建操作系统和控制软件)。

因此除了:

x!y - get word from byte address (x + y) * 2

我们也有

x!%y - get byte from byte address (x * 2) + y
x%!y - get word from byte address x + (y * 2)
x%%y - get byte from byte address x + y

我很确定它们是特定于实现的,因为我从未在其他任何地方看到它们。早在语言标准像今天这样重要之前,BCPL 就已经存在了。

canonical 语言规范应该是 Richards 编写该语言以来的早期规范(您的第二份文档是针对大约十年后的 Essex BCPL 实施)。但请记住,MAC 项目是最早的迭代 - 之后也有很多进步。

例如,2013 年修订的 BCPL 用户指南(请参阅 Martin's home page)指定 #b#o#x 作为各种非十进制基数的前缀。

【讨论】:

  • 好久没登录了,没看到这个回答,不过非常感谢你的回答!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
相关资源
最近更新 更多