首页 >后端开发 >C++ >为什么前导零会改变 C 中的整数值?

为什么前导零会改变 C 中的整数值?

Susan Sarandon
Susan Sarandon原创
2024-11-27 19:40:11335浏览

Why Do Leading Zeros Change Integer Values in C  ?

揭开整数中前导零的谜团

您在 Visual Studio 2013 中观察到的行为反映了在 Visual Studio 2013 中表示整数的规则不同的基数,特别是十进制、八进制和十六进制。

整数C 中的文字可以以零开头来表示各种基数:

  • 十进制(以 10 为底): 十进制文字以非零数字开头,由从 0 到 的数字组成9.
  • 八进制(以 8 为底): 八进制文字以零开头,后跟0 到 7 之间的数字。
  • 十六进制(以 16 为基数): 十六进制文字以 0x 或 0X 开头,由 0 到 9 的数字和字母 a 到 f(或 A 到 f)组成F).

在你的例如:

  • 07 是八进制文字,表示值 7(以 10 为基数的 7)。
  • 16 是十进制文字,表示值 16。
  • 00016 是一个八进制文字,代表值 14(基数为 16 8).

尝试分配 08 时编译器错误是因为 8 不是有效的八进制数字。它仅在 7 以内有效。

从 00016 转换为 14 的原因是八进制文字中的前导零表示该数字以 8 为基数。编译器通过将每个数字相乘来执行转换按其相应的 8 次幂,从右到左开始。

对于 00016,这意味着:
0 * 8^4 0 * 8^3 0 * 8^2 1 * 8^1 6 * 8^0 = 14

因此,您观察到的行为是编译器基于以下内容解释数值的结果它们的前导数字以及 C 中不同碱基的规则。

以上是为什么前导零会改变 C 中的整数值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn