猿问

当C / C ++中的数字常量以0开头时,这是什么意思?

好的...所以我有一个愚蠢的想法,尝试将值0123放入一个整数,只是想知道会发生什么,我以为我在打印该值时会得到123,但我却得到了83 ...有什么想法吗?使该值变为83的编译器/内存内部发生了什么?


我在C ++和C中使用GCC编译器进行了尝试,还尝试了使用float产生相同的结果。


婷婷同学_
浏览 1851回答 4
4回答

智慧大石

根据[lex.icon]中的C ++标准,整数文字可以分为3种类型:十进制文字,八进制文字和十六进制文字,每种类型都可以具有后缀,表示长度和长度类型十进制字面量必须以非零数字开头,而八进制字面量必须以0开头,十六进制字面量具有0x和0X,在前缀(对于八进制和十六进制字面量)之后,在相应基数中无法表示的任何数字都应触发编译错误(例如,导致error C2041: illegal digit '9' for base '8'和在其他编译器中的09prog.cpp:6:15: error: invalid digit "9" in octal constant),因为如果整数文字无法表示,则程序会格式错误。

守着星空守着你

0123是一个八进制常量(以8为底)。83是十进制等效项。
随时随地看视频慕课网APP
我要回答