我无法理解打印前八个数组元素的输出结果。

3
我试图理解给定代码生成以下输出的方式。大小为8的元素数组将数字按照代码中所述存储。它生成的输出如下:

0 1 8 9 100 101 110 111

我不明白的是为什么89是输出的一部分?为什么值010011没有被打印? 以下是给定的代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int a[8] = {000,001,010,011,100,101,110,111};

    for(i=0 ; i<8 ; i++)
        printf("%d  ",a[i]);

    return 0;
}

4
阅读任何一本关于 C 语言的书籍,了解八进制字面常量。 - Paul R
3
这里有一个回答得很好的问题,涉及几乎相同的问题,是十小时前发布的。链接在这里:https://dev59.com/OZjga4cB1Zd3GeqPPMrp。 - user3078414
2个回答

3
任何以0开头的整数字面值都被视为八进制表示法。在你的代码中,你用八进制数初始化了一些数组成员,然后打印出它们的十进制表示(使用%d格式说明符)。
所以,你的期望和输出不同。
基本上,你的初始化,在十进制形式下,看起来像:
 int a[8] = {0,1,8,9,100,101,110,111}; //first 4 initializers are converted to decimal.

另一方面,为了完整起见,如果您使用%o格式说明符(八进制表示),您可以看到前四个初始化程序,就像您预期的那样,但是最后四个也将以八进制形式打印,例如:

 printf("%o  ",a[i]);

这将会给你以下输出:

0 1 10 11 144 145 156 157


1
非常感谢您的详细解释!真的帮了我很多! - noob64
不客气。你也可以考虑接受帮助过你的答案。 - Sourav Ghosh

1
每当你用0开始一个int时,它会将其视为八进制数(基数8)(0-7)。
因此,它会打印0作为000的输出。
对于001等情况,它会打印1等数字。

非常感谢您的回答! - noob64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接