为什么编译器在执行时将0100整数位作为c中的64位?

why does compiler take 0100 integer digits as 64 in c when I execute?

这个程序主要是计算一个整数的位数。但是,当我给出不以零开头('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;
}

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

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

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

希望对您有所帮助!