【发布时间】:2011-02-14 00:07:34
【问题描述】:
例如,在 c++ 中,当您编写 setprecision (12) 时,12 是以 10 为底的,但是当您将其编写为 setprecision (012) 时,它是一个八进制数,为什么?
【问题讨论】:
-
因为在 C 和 C++ 中就是这样。没有其他答案。以
0开头的整型文字是八进制。
例如,在 c++ 中,当您编写 setprecision (12) 时,12 是以 10 为底的,但是当您将其编写为 setprecision (012) 时,它是一个八进制数,为什么?
【问题讨论】:
0 开头的整型文字是八进制。
因为带有前导零的常量(除了前导 0x)总是八进制:
八进制整数文字(以八为底) 以数字 0 开头,包括 八进制数字的序列。
C++ 标准草案 (n1905) §2.13.1
它与 setprecision 一点关系都没有。
【讨论】:
因为这就是它在 C 中的工作方式。在设计 C 时,八进制数经常使用,因此他们为它们添加了符号。目前,它很少有用,而且大多令人困惑。
【讨论】:
在 C++ 中,如果整数文字以 0 数字开头(并且 0 后面没有 x),则以下数字将被视为八进制数字。
【讨论】: