C++ 当C/C++;是否以0作为前缀?

C++ 当C/C++;是否以0作为前缀?,c++,c,compiler-construction,syntax,numbers,C++,C,Compiler Construction,Syntax,Numbers,好的。。。所以我有一个愚蠢的想法,试着把0123的值转换成int,只是想看看会发生什么,我假设当我打印这个值时,我得到123,但是我得到了83。。。你知道为什么吗?编译器/内存中发生了什么使该值变为83 我在C++和C中用GCC编译器尝试过,也尝试了一个浮点,得到了相同的结果。C/C++中的< /P> < P>一个数字加上‘0’的字元是八进制(基8)。 参见0123是一个八进制常数(基数8)。83是十进制的等效值 0123在中。这是因为像这样以0开头的任何数字都被认为是八进制的,而不是十进制的

好的。。。所以我有一个愚蠢的想法,试着把0123的值转换成int,只是想看看会发生什么,我假设当我打印这个值时,我得到123,但是我得到了83。。。你知道为什么吗?编译器/内存中发生了什么使该值变为83


我在C++和C中用GCC编译器尝试过,也尝试了一个浮点,得到了相同的结果。C/C++中的< /P> < P>一个数字加上‘0’的字元是八进制(基8)。


参见

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

0123
在中。

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


同样,如果以0x开头,将得到十六进制数,前导0表示“八进制”数。根据C++标准,在<>强> [LeX.ICAN] < /强>中,可以将1×8 ^ ^ 2+2×8 ^ 1+3×8 ^ 0=83</P>P>。
十进制文字必须以非零数字开头,而八进制文字以0开头,十六进制文字有0x和0x,在前缀(对于八进制文字和十六进制文字)之后,任何在相应基中不可表示的数字都应触发编译错误(例如09导致
错误C2041:基'8'的非法数字'9'
和其他编译器中的
prog.cpp:6:15:error:八进制常量中的无效数字“9”),因为如果整数文本不可表示,程序将变得格式错误。

娱乐比困惑好。
用八进制写数字,在值前面加上0。。。要以八进制写入数字,请在值前面加上0x或0xdoh!是的!换了个更好的。。。谢谢这是一个前导的
0
(零),不是一个前导的
O
(O)。当然你是非常正确的,刚刚意识到我的错误并回来编辑。试图给自己一个愚蠢的-1:-)