为什么在表示八进制数时要使用前导零?

23

我一直想知道为什么要使用前导零(0)来表示八进制数,而不是像0o这样的形式。使用0o同样有用,但不会像前导的0那样引起一些问题 (例如在 JavaScript 中写 parseInt('08');)。这种设计选型背后的原因是什么?

3个回答

28
所有现代编程语言都从C语言中引入了这种约定,而C语言又是从B语言引入的,B语言又是从BCPL引入的。
唯独BCPL使用#1234表示八进制,#x1234表示十六进制。因为在B语言中#是一个一元操作符(将整数转换为浮点数),所以不能使用#1234,于是将#作为基数指示器替换为0,B语言便与此约定不同。
B语言的设计者试图使其语法非常紧凑,我想这就是他们没有使用两个字符前缀的原因。

3

1
“0b”通常用于二进制而不是八进制。我猜前导的“0”是为了表示“Octal(八进制)”。
如果你知道你要解析的是八进制,那么使用parseInt('08', 10);将其视为十进制数进行处理。

是的,我知道。我只是想知道为什么要使用它,因为对于新手来说有点混淆。我犯了一个错误,用0b修正为0o - Hauleth
“Zero” 指的是 “八进制” 吗?并不是。我的猜测是,它只是当时普遍使用的数字格式,就像现在的十六进制一样。 - tripleee
@triplee:你知道0看起来像O,对吧?这不是人们用数字替换13773rs已经有好几年了。 - Brent Rittenhouse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接