我一直想知道为什么前导零(0
)用于表示八进制数,而不是 - 例如 - 0o
。 0o
的使用同样有用,但不会导致与0
es(例如JavaScript中的parseInt('08');
)一样多的问题。这个设计选择背后的原因是什么?
答案 0 :(得分:17)
所有现代语言都从C导入此约定,从C导入它,从BCPL导入它。
除了BCPL使用#1234
表示八进制,#x1234
表示十六进制。 B已经偏离了这个约定,因为#是B中的一元运算符(整数到浮点转换),因此#1234无法使用,#作为基本指标被替换为0。
B的设计者试图使语法非常紧凑。我想这就是他们没有使用双字符前缀的原因。
答案 1 :(得分:1)
“0b”通常用于二进制而不是八进制。领先的“0”是,我怀疑“ O -ctal”。
如果您知道要解析八进制,请使用parseInt('08', 10);
使其将该数字视为十进制数。
答案 2 :(得分:0)
值得一提的是,在Python 3.0中,由于您在问题中提到的确切原因,他们决定八进制文字必须以'0o'作为前缀,而旧的'0'前缀则成为SyntaxError。
https://www.python.org/dev/peps/pep-3127/#removal-of-old-octal-syntax