首页 > 解决方案 > 为什么编译器在执行时将 0100 整数位作为 c 中的 64?

问题描述

该程序基本上用于计算整数的位数。但是,当我给出不以零开头的输入数字('100')时,它可以正常工作,但是如果我以零开头('00100')给出输入,那么它会给出错误的输出。

例子:

1)输入:100
输出:3 .预期输出。

2)输入:00100
输出:2 .意外输出。

因为它需要' 00100 '整数作为整数' 64 '我不知道为什么?

    #include <stdio.h>
    #include <stdlib.h>

    int Digit_count(int);
    int main(void)
    {
        int a;
        a = Digit_count(00100);
        printf("\nNumber of Digits = %d\n",a);

        return 0;
    }


/// function for count number of digits

int Digit_count(int a)
{
    int p,digit;
    p=a,digit=0;

    printf("\n%d\n",p);  // **This line code prints Output: 64**

    while(p!=0)
    {
        p = p/10;
        digit++;
    }

  return digit;
}

标签: ccodeblocks

解决方案


在 C 编程语言中,定义了几种不同的数值系统供程序员使用。

十进制数是我们习惯的标准以 10 为底的数字,它们是您希望程序使用的,但在第 62 页的 C11 标准,它们定义以 0 开头的整数常量作为八进制常量,这意味着以 8 为基数。

因此,当您将 100 传递给程序时,它会将其解释为十进制 100,与八进制 144 相同,而当您键入 0100 时,它会将其解释为八进制 100,与十进制 64 相同。

我希望这会有所帮助!


推荐阅读