为啥用前导零来表示八进制数?

Posted

技术标签:

【中文标题】为啥用前导零来表示八进制数?【英文标题】:Why are leading zeroes used to represent octal numbers?为什么用前导零来表示八进制数? 【发布时间】:2012-07-14 01:20:09 【问题描述】:

我一直想知道为什么用前导零 (0) 来表示八进制数,而不是 - 例如 - 0o。使用0o 会同样有帮助,但不会像前面的0es 那样引起很多问题(例如,javascript 中的parseInt('08');)。这种设计选择背后的原因是什么?

【问题讨论】:

【参考方案1】:

“0b”通常用于二进制而不是八进制。前导的“0”是,我怀疑是“O -ctal”。

如果您知道要解析八进制,请使用parseInt('08', 10); 使其将数字视为以十为底。

【讨论】:

是的,我知道。我只是想知道为什么要使用它,因为它对新手来说有点混乱。使用0b 我犯了一个错误,固定为0o “零”与“八进制”一样吗?几乎不。我的猜测是它只是当时流行的数字格式,就像现在的十六进制一样。 @triplee:你确实意识到 0 看起来像一个 O,对吧?并不是说人们没有用 y34rs 的数字代替 13773rs。【参考方案2】:

所有现代语言都从 C 导入此约定,从 B 导入,从 BCPL 导入。

除了 BCPL 使用 #1234 表示八进制和 #x1234 表示十六进制。 B 背离了这个约定,因为 # 是 B 中的一元运算符(整数到浮点的转换),所以无法使用 #1234,将 # 作为基础指示符替换为 0。

B 的设计者试图使语法非常紧凑。我想这就是他们没有使用两个字符前缀的原因。

【讨论】:

【参考方案3】:

值得注意的是,在 Python 3.0 中,由于您在问题中提到的确切原因,他们决定八进制文字必须以“0o”为前缀,而旧的“0”前缀变成了 SyntaxError

https://www.python.org/dev/peps/pep-3127/#removal-of-old-octal-syntax

【讨论】:

以上是关于为啥用前导零来表示八进制数?的主要内容,如果未能解决你的问题,请参考以下文章

R:sprintf用前导空格填充十进制数

尝试用前导空格填充十进制数

LeetCode刷题(124)~十进制整数的反码异或

十六进制转八进制

Leetcode 476.数字的补数

476-数字的补数