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

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

Linda Hamilton
发布: 2024-12-02 22:43:12
原创
398 人浏览过

Why Do Zero-Prepended Numbers Behave Unexpectedly in C  ?

理解零前缀数字的特殊行为

经常观察到,在某些编程语言(如 C)中,以零开头的数字会表现出意想不到的行为。让我们深入研究您提出的具体场景,以理解这些怪癖。

考虑以下代码摘录:

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...
登录后复制

零数字和八进制解释

在 C 中,整数文字可以用十进制、八进制或十六进制指定。前置零的整数通常被解释为八进制文字,除非该文字以 0x 或 0X 开头,这表示十六进制基数。

在您的示例中,00016 被解释为八进制文字,导致 i == 14. 八进制数使用数字 0-7 表示值。前导零不会影响文字的值。

类似地,05016 也被解释为八进制文字,可以通过将每个数字乘以适当的 8 次方来转换为十进制。这给我们 i == 2574.

前导零和十六进制解释

但是,如果文字以 0x 或 0X 开头,则将其解释为十六进制文字。十六进制数字使用数字 0-9 和字母 A-F(或 a-f)表示值。

在您的示例中,0x16 将被解释为表示值 22 的十六进制文字。

八进制数字和语法错误

根据C标准,8和9无效八进制数字。因此,08 是无效的八进制文字,并会在编译期间导致语法错误。

结论

您观察到的前缀为零的数字的怪癖源于解释 C 中整数文字的特定规则。通过理解这些规则(即,除非另有说明,否则将前置零的整数解释为八进制文字),您可以避免错误并正确处理整数值。

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

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