首页 > 后端开发 > C++ > 为什么以零为前缀的数字在 C 中表现异常?

为什么以零为前缀的数字在 C 中表现异常?

Barbara Streisand
发布: 2024-12-07 14:50:17
原创
488 人浏览过

Why Do Zero-Prefixed Numbers Behave Unexpectedly in C  ?

理解零前缀的数字及其意义

在编程领域,以零开头的数字可以表现出有趣的行为。让我们使用 Visual Studio 2013 中的示例深入研究具体细节。

考虑以下代码片段:

int i = 07;     // i == 7
int i = 16;     // i == 16
int i = 00016;  // i == 14, why?
int i = 05016;  // i == 2574, wow )
int i = 08;     // compile error, compiler expects octal number...
登录后复制

零前缀数字的特殊处理

编译器对零前缀数字的解释不同,具体取决于context:

  • 十进制数字(基数为 10): 当零前缀数字仅包含 0 到 7 的数字时,它被解释为十进制数字。例如,07 相当于 7。
  • 八进制数(基数 8): 如果零前缀数字包含数字 8 或 9,则被视为八进制数。但是,请注意,根据 C 标准,这是无效的用法。
  • 十六进制数字(基数 16):以 0x 或 0X 开头的零前缀数字被解释为十六进制数字。

00016 和的异常行为05016

赋值 int i = 00016;解析为 i == 14,因为编译器将前导零视为额外的八进制数字,即使这根据 C 标准是无效的。

类似地, int i = 05016;产生 i == 2574,因为编译器将其解释如下:

  • 050 被视为八进制 50。
  • 16 被视为十进制 16。
  • 结果计算公式为 (50 * 8) 16 = 2574.

08 编译错误

以 0 开头后跟 0-7 以外的数字(例如 08)的整数文字会触发编译错误,因为编译器期望它是八进制数,但 8 不是有效的八进制数字。

以上是为什么以零为前缀的数字在 C 中表现异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板