BCPL 八进制数值常量

2023-12-30

由于有人问我关于使用前缀“0x”表示十六进制数字背后的推理的问题,我一直在深入研究 BCPL 的历史。

在我的搜索中,我偶然发现了这个代币背后历史的非常好的解释。 (为什么十六进制数以 0x 为前缀? https://stackoverflow.com/questions/2670639/why-are-hexadecimal-prefixed-as-0x)

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

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

我还在这里找到了第二个答案,它使用了 # 语法,这进一步引起了我对这个主题的兴趣。 (为什么使用前导零来表示八进制数? https://stackoverflow.com/questions/11483216/why-are-leading-zeroes-used-to-represent-octal-numbers)

任何历史见解都将受到高度赞赏。


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

例如,虽然我们使用的单元具有 16 位单元(因此x!y给了你16位的word从字地址x + y(字地址是字节地址的一半),我们还需要从中提取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 就已经存在了。

The 典范语言规范将是自 Richards 编写该语言以来的早期文档(您的第二份文档是大约十年后的 Essex BCPL 实现)。但请记住,Project MAC 是最早的迭代 - 之后也有很多进步。

例如,BCPL 用户指南有 2013 年修订版(请参阅马丁的主页 http://www.cl.cam.ac.uk/~mr10/) 其中指定#b, #o and #x作为各种非十进制的前缀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BCPL 八进制数值常量 的相关文章

随机推荐