2013-02-08 65 views
1

我想这个简单的C程序来划分数..简单的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..I无法理解这个意外的输出。任何人都可以说为什么它会产生这样的产出?

明确的解释将不胜感激。

编辑:如果我试图

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

你想做什么?除八进制还是整数?你不能有前导零... – 2013-02-08 12:41:40

+3

如果你开始你的数字为零,他们是八进制。 126 oct = 86 dec。 – ElPaco 2013-02-08 12:42:23

+0

i = 00000001000;可能是i = 0b000001000; ?你的编译器是什么? – 2013-02-08 12:48:23

回答

4

在C中,开始0号码在基座8(八进制)不是小数。所以你的号码0126确实是十进制的86

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

0

当您使用0前缀整数时,它将被解释为八进制数(基数8)。因此0126实际上是86.

2

C中的任何numver字面值都是一个八进制数。

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

编辑

基础上的评论,看看文章约positional notation的数字。

+0

如果我正在尝试050/2,那么结果为50? – 2013-02-08 12:44:55

+0

@ ling.s,你确定!?它是'40/2'。所以它应该是20. – StoryTeller 2013-02-08 12:48:10

+0

对不起50/02,这给出了25个 – 2013-02-08 12:50:15

1

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