我试图了解如何为给定代码生成以下输出。大小为8的元素数组存储代码中提到的数字。以下是它生成的输出:
0 1 8 9 100 101 110 111
我不明白为什么 8 和 9 是输出的一部分?为什么不打印 010 和 011 的值?
代码如下:
#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;
}
答案 0 :(得分: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 :(得分:1)
每当你使用int
开始0
时,它会将其作为八进制数(基数为8)(0-7)。
因此,它正在为0
000
1
001
等等。