2012-07-15 35 views
2

我寫了下面的代碼,期望它輸出211,但是當我編譯並運行它時,我看到了137混淆字面值,算術C

有人能解釋一下發生了什麼嗎?謝謝。

‎#include <stdio.h> 

int main() 
{ 
    int binary1,binary2; 

    binary1 = 0100; 
    binary2 = 0111; 

    printf("%d\n", binary1 + binary2); 

    return 0: 
} 
+1

即使這些_were_二進制數,你會得到'8 + 11 = 19 '。 – Peter 2012-07-15 19:18:58

回答

9

這些都不是二進制數但octal(基座8):

binary1 = 0100; // = 64 
binary2 = 0111; // = 64 + 8 + 1 = 73 

printf("%d \n", binary1 + binary2); // = 64 + 73 = 137 
1

兩個編號都以八進制,並在鹼添加它們8.

3

在0100和0111的前導零意味着數字被解釋爲八進制數字。十進制中的100是十進制中的64,十進制中的111是十進制中的73。

6

因爲%d打印出十進制數字。如果要打印八進制數字,則需要使用%o,這將打印出。

  • %d:小數=> 137
  • %o:八=> 211

printf()不知道你在八進制定義的數字。

1

在C中,前綴爲'0'的數字文字是八進制(基數8)。這就是爲什麼它顯示結果137

0100八進制相當於十進制64和0111是73,

so 64+73 = 137