我一直想知道为什么用前导零 ( 0
) 来表示八进制数,而不是——例如—— 0o
。的使用0o
同样有帮助,但不会像前导0
es 那样引起很多问题(例如parseInt('08');
在 JavaScript 中)。这种设计选择背后的原因是什么?
问问题
3142 次
3 回答
21
所有现代语言都从 C 导入这个约定,从 B 导入它,从 BCPL 导入它。
除了 BCPL 用于#1234
八进制和#x1234
十六进制。B 已经背离了这个约定,因为 # 是 B 中的一元运算符(整数到浮点的转换),所以不能使用 #1234,并且将 # 作为基础指示符替换为 0。
B 的设计者试图使语法非常紧凑。我想这就是他们没有使用两个字符前缀的原因。
于 2012-07-14T11:24:10.183 回答
1
“0b”通常用于二进制而不是八进制。前导“0”是,我怀疑是“ O -ctal”。
如果你知道你将要解析八进制,那么使用parseInt('08', 10);
它来让它把这个数字当作十进制。
于 2012-07-14T11:17:10.713 回答
1
值得注意的是,在 Python 3.0 中,由于您在问题中提到的确切原因,他们决定八进制文字必须以“0o”为前缀,而旧的“0”前缀变成了 SyntaxError
https://www.python.org/dev/peps/pep-3127/#removal-of-old-octal-syntax
于 2020-11-23T12:09:45.483 回答