我寫了下面的代碼,期望它輸出211
,但是當我編譯並運行它時,我看到了137
。混淆字面值,算術C
有人能解釋一下發生了什麼嗎?謝謝。
#include <stdio.h>
int main()
{
int binary1,binary2;
binary1 = 0100;
binary2 = 0111;
printf("%d\n", binary1 + binary2);
return 0:
}
我寫了下面的代碼,期望它輸出211
,但是當我編譯並運行它時,我看到了137
。混淆字面值,算術C
有人能解釋一下發生了什麼嗎?謝謝。
#include <stdio.h>
int main()
{
int binary1,binary2;
binary1 = 0100;
binary2 = 0111;
printf("%d\n", binary1 + binary2);
return 0:
}
這些都不是二進制數但octal(基座8):
binary1 = 0100; // = 64
binary2 = 0111; // = 64 + 8 + 1 = 73
printf("%d \n", binary1 + binary2); // = 64 + 73 = 137
兩個編號都以八進制,並在鹼添加它們8.
在0100和0111的前導零意味着數字被解釋爲八進制數字。十進制中的100是十進制中的64,十進制中的111是十進制中的73。
因爲%d
打印出十進制數字。如果要打印八進制數字,則需要使用%o
,這將打印出。
%d
:小數=> 137%o
:八=> 211printf()
不知道你在八進制定義的數字。
在C中,前綴爲'0'的數字文字是八進制(基數8)。這就是爲什麼它顯示結果137
0100八進制相當於十進制64和0111是73,
so 64+73 = 137
即使這些_were_二進制數,你會得到'8 + 11 = 19 '。 – Peter 2012-07-15 19:18:58