【发布时间】:2010-09-07 20:35:10
【问题描述】:
我从未在我的代码中使用八进制数,也没有遇到任何使用它的代码(尽管是十六进制和位旋转)。
我在 1994 年左右开始使用 C/C++ 进行编程,所以我可能还太年轻,无法做到这一点?旧代码是否使用八进制? C 通过在前面加上 0 来支持这些,但是使用这些以 8 为基数的数字文字的代码在哪里?
【问题讨论】:
-
我一直使用它们(以八进制零的形式):
if (b < 0) b = 0; -
@pmg:我想知道将 0q1234 定义为非零八进制常量的“正确”格式是否有任何困难,并明确贬低 01234 并建议编译器生成非致命的诊断?实际上,我希望看到的是基于位的通用格式 0[[x[0-9A-Fa-f]+]|[q[0-7]+]|[w[0-3] +]|[v[0-1]+]]+ 允许混合 1-4 位字段,因为 3 位字段并不总是从右侧对齐 3 位的倍数。
-
巧合的是,这个问题今天终于出现在 SO 的首页(有人添加了答案),Raymond Chen 今天也碰巧发了一篇关于八进制混乱的文章:The curse of the leading zero
-
我看到的唯一用途是在定义文件 open() 标志和权限时,因为它们通常是从标准参考中复制而来的。但即使在这些情况下,它们也比整数文字的十进制甚至二进制表示更有帮助。
-
@supercat Python 3 这样做 - 八进制常量的形式为
0o1234,而旧的01234形式给出了语法错误。