C/C++ 中的数字常量前缀为 0 是什么意思?

问题描述 投票:0回答:7

好吧...所以我有一个愚蠢的想法,尝试将值 0123 放入 int 中,只是想看看会发生什么,我假设当我打印该值时我会得到 123,但我得到的是 83..任何想法为什么?编译器/内存内部发生了什么使该值变成 83?

我在 C++ 和 C 中使用 GCC 编译器尝试过此操作,并且还尝试使用浮点数,得到了相同的结果。

c++ c syntax numbers
7个回答
18
投票

在 C/C++ 中,以“0”为前缀的数字文字是八进制(基数 8)。

参见 http://www.cplusplus.com/doc/tutorial/constants/



3
投票

这是因为任何像这样以 0 开头的数字都被认为是八进制(基数 8)而不是十进制。

同样的事情,如果你以 0x 开头,你将得到十六进制


3
投票

前导 0 表示“八进制”数字。所以就变成了 1*8^2 + 2*8^1 + 3*8^0 = 83


2
投票

0123 是一个八进制常数(基数为 8)。 83 是十进制等值。


1
投票

0123
八进制


1
投票

根据[lex.icon]中的C++标准,整数文字可以分为3种类型:十进制文字、八进制文字和十六进制文字,每种类型都可以有符号和长度类型的后缀

十进制文字必须以非零数字开头,而八进制文字以 0 开头,十六进制文字有 0x 和 0X,前缀后(对于八进制文字和十六进制文字),任何在相应基数中无法表示的数字都应该触发编译错误(例如 09 导致

error C2041: illegal digit '9' for base '8'
,而在其他编译器中
prog.cpp:6:15: error: invalid digit "9" in octal constant
),因为如果整数文字不可表示,程序就会变得不正确。

© www.soinside.com 2019 - 2024. All rights reserved.