经常观察到,在某些编程语言(如 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中文网其他相关文章!