当C/C++中的数字常量以0为前缀时,这意味着什么
What does it mean when a numeric constant in C/C++ is prefixed with a 0?
好的。。。所以我有一个愚蠢的想法,试着把0123的值代入int,只是想看看会发生什么,我以为当我打印这个值时,我会得到123,但实际上我得到了83…有什么想法吗?编译器/内存内部发生了什么,导致该值变为83?
我在C++和带有GCC编译器的C中尝试过这一点,也尝试过使用float,结果相同。
在C/C++中,前缀为"0"的数字文字是八进制(以8为底)。
请参阅http://www.cplusplus.com/doc/tutorial/constants/
祝贺您!你发现了八进制。
这是因为任何像这样以0开头的数字都被认为是八进制(以8为基数),而不是十进制。
同样的事情,如果你从0x开始,你会得到十六进制
前导的0表示一个"八进制"数字。所以它变成了1*8^2+2*8^1+3*8^0=83
0123是一个八进制常数(基数为8)。83相当于十进制数。
0123
为八进制。
根据[lex.icon]中的C++标准,整数文字可以分为三种类型:十进制文字、八进制文字和十六进制文字,每种文字都可以有一个signess和长度类型的后缀
十进制文字必须以非零数字开头,而八进制文字以0开头,十六进制文字有0x和0x,在前缀之后(对于八进制文字和十六进制文字),在相应的基中不能表示的任何数字都应该触发编译错误(如导致error C2041: illegal digit '9' for base '8'
和其他编译器prog.cpp:6:15: error: invalid digit "9" in octal constant
的09),因为如果整数文字是不可表示的,则程序将变得格式错误。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- 在 WScript.CreateObject 中使用前缀的目的是什么?
- 在QT资源系统中,前缀比文件系统路径的优势是什么?
- 在一行C 中,该代码后缀和前缀的输出的逻辑是什么
- C++中的第一个覆盖前缀-我的代码出了什么问题
- 字符文字与字符串字面的u前缀有什么区别
- C 中的L前缀到底是什么
- 在Windows中获取安装前缀的最佳方法是什么
- 什么是 C# @ 符号前缀字符串的C++等效项
- "cxa"前缀在"__cxa_demangle"中是什么意思?
- 派生类使用或不带 "virtual" 前缀重写基类的虚函数之间有什么区别?
- 我不确定这个前缀哈希方法应该做什么
- 函数调用的前缀"::"在C++中有什么作用?
- 在源文件中指定include前缀与在编译器的搜索路径参数中指定include前缀的优缺点是什么
- 当没有前缀的时候::有什么意义呢?
- 在什么情况下,"name"必须以"typename"为前缀?
- 当C/C++中的数字常量以0为前缀时,这意味着什么
- 我想从这段代码中删除使用命名空间std,但我不确定什么都需要用std::作为前缀