【问题标题】:I am not able to understand the output I am getting for printing an array of 1st eight array elements [duplicate]我无法理解打印第一个八个数组元素的数组所得到的输出[重复]
【发布时间】:2016-07-10 14:24:54
【问题描述】:

我试图了解如何为给定代码生成以下输出。大小为 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;
}

【问题讨论】:

  • 阅读任何 C 书籍中的八进制常量。
  • 这是一个很好回答的问题,几乎与 same problem 相关,仅在十小时前发布。

标签: c printf


【解决方案1】:

任何以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

【讨论】:

【解决方案2】:

每当您以 0 开头 int 时,它都会将其作为八进制数(以 8 为基数)(0-7)。

所以,它正在为000 打印0

1 为001 等等。

【讨论】:

  • 非常感谢您的回答!
猜你喜欢
  • 2013-12-29
  • 2014-06-24
  • 2021-01-31
  • 2019-02-26
  • 2012-09-25
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多