BCPL八进制数值常数

时间:2013-09-24 17:11:45

标签: constants numeric bcpl

我一直在深入研究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?

非常感谢任何历史见解。

1 个答案:

答案 0 :(得分:4)

BCPL中的语法略有不同。

例如,虽然我们使用的那个具有16位单元(因此x!yx + y的字地址给出了16位(a字地址是字节地址的一半),我们还需要从字节地址和字节值中提取(因为我们主要是在6809字节可寻址的CPU上创建OS和控制软件)。 / p>

因此除了:

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早在语言标准与今天一样重要之前就已存在。

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

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