2014-02-21 60 views
0

下面是這個簡單的代碼:Bitoperation結果並不如預期

char a = '10'; 
char b = '6'; 
printf("%d\n", a | b); 
printf("%d\n", a^b); 
printf("%d\n", a << 2); 

和輸出

54 
6 
192 

現在的問題是,爲什麼這些結果。我檢查了它在紙上,我有什麼是

1110 for a | b = 14 
1100 for a^b = 12 
00101000 for a << 2 = 40 

那麼,爲什麼這種不同的結果?

+0

提示:嘗試'printf(「%d,%d \ n」,a,b);'。我認爲你的意思是'char a = 10; char b = 6;' – enhzflep

回答

3

您聲明:

char a = '10'; 
char b = '6'; 

在這種情況下b001101100x36),因爲你在聲明一個字符,而不是一個整數。

我也不知道爲什麼char a = '10';甚至可以工作,因爲單引號(')僅用於創建單個字符文字,並且您在那裏聲明瞭兩個文字。

正確的方法應該是:

char a = 10; 
char b = 6; 
printf("%d\n", a | b); 
printf("%d\n", a^b); 
printf("%d\n", a << 2); 
+1

注意:有些編譯器接受整數「多字符常量」,但它們高度依賴於編譯器/平臺。比較http://stackoverflow.com/questions/6944730/multiple-characters-in-a-character-constant。 –

+0

是的,我認爲。感謝您爲我清理它。 –

+1

那麼'10'的位重播是什麼呢? – Saphire

2

你爲int106解決了這個在紙上不char小號'10' = 49 or 48(多字符常量的解釋是依賴於編譯器)和'6' = 54

+0

如何解釋多字符常量「10」是高度依賴於編譯器的。例如,對於OS X上的Clang,它是'= 48',即第一個字符被忽略。 –

+0

@MartinR;是。編輯。 – haccks

+0

爲什麼49?你是怎麼計算的? – Saphire

1

這是因爲你定義的變量作爲字符(字符),但在筆記本 你被他們當作整型(int)的 計算的結果。如果你想正確答案試試這個代碼,並檢查 -

int a = 10; 
int b = 6; 
printf("%d\n", a | b); 
printf("%d\n", a^b); 
printf("%d\n", a << 2); 
+0

感謝@haccks編輯/更正我的格式。 – RahulKT