2013-02-08 70 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.