1

我正在尝试这个简单的 C 程序来划分一个数字..

void main()
{
 int i,j,k;
 i=00126;
 j=2;
 k=i/j;
 printf("%d",k); 
}

它显示输出为 43 而不是 63 .. 如果我把另一个 0 作为

i=000126;

现在我收到错误为非法八进制数字。

如果我正在尝试

i=00000001000; 

它没有显示任何错误并给出 256 的结果。我无法理解这个意外的输出。谁能说出它为什么会产生这样的输出?

清楚的解释将不胜感激。

编辑:如果我尝试过

 int i,j,k;
 i=1000;
 j=0002;
 k=i/j;
 printf("%d",k); //which gives 500 as result
4

4 回答 4

4

在 C 中,以 开头的数字0是以 8 为底(八进制)而不是十进制。所以你的数字0126确实86是十进制的。

在这个主题上,以 开头的数字0x也是十六进制(以 16 为基数),例如0x1a5.

于 2013-02-08T12:41:37.857 回答
2

任何以 0 开头的数字文字C都是八进制数。

所以(0126)八进制=(86)十进制。

编辑

根据评论,请查看有关数字位置符号的文章。

于 2013-02-08T12:41:47.080 回答
1

00126 被读取为八进制数 (64 + 2*8 + 6 = 86)。所以,43 是正确的。如果你想要一个十进制的 126,就写 126。

于 2013-02-08T12:42:54.407 回答
0

当您为整数加上 a 前缀时,0它被解释为八进制(以 8 为基数)数字。所以 0126 实际上是 86。

于 2013-02-08T12:41:46.810 回答