2016-01-22 93 views
-8

我正在做一些在C中的邏輯任務,而我手工評估一些結果不同於CodeBlocks打印的結果。評估C二進制操作

將以前執行的指令考慮在內的以下表達式的十進制值是什麼?

我這裏還有數字(我不懂行輸出與 「< < < < < < < <」 簽字):

int i, j, k, *p2i; 

float fp; 

p2i=&k; 

i=0x22; 

j=025; 

k=25; 

++k; 

k++; 

k|7&12;   <<<<< 

fp=10/20;   <<<<<< 

fp=(float)10/20;  <<<<<< 
+3

您不明白16個操作中的3個;真的有必要包括你在你的問題中理解的13個嗎? – mah

+2

這是不必要的神祕和難以遵循。 (你從什麼剪切和粘貼它?)請只顯示你不明白的表達,說出你期望他們給予什麼,以及你得到了什麼。 –

+2

可能需要注意的事項:&更高的優先級,|,整數除法給出整數結果。 – pticawr

回答

2
k=25; 
++k; 
k++; 
k|7&12; 

第3行後, k是27.在第四個表達式中,按位與運算符&比位運算符具有更高的優先級,所以它等效於27|(7&12);轉換的值以二進制爲我們提供了11011|(00111&01100);內部部分的計算結果爲00100,然後11011|00100計算結果爲​​,其是31.

這個表達式的值出現在一個void上下文(即它沒有被分配給任何東西)並被丟棄。

fp=10/20; 

常數1020都是int類型。因此執行整數除法,結果爲0.然後將該值轉換爲float並分配給fp

fp=(float)10/20; 

恆定10澆鑄到float,然後通過20劃分。由於其中一個操作數的類型爲float,所以另一個操作數被提升爲類型並執行浮點除法,結果爲0.5。然後將該值分配給fp

+0

非常感謝你@dbush 而不是11011的外部值我一直在計算11000。 – mjrdnk

3
k|7&12; ==> 27|7&12 ==> 27|4 ==> 31 (discarded value) 

fp=10/20; ==> fp=0 ==> 0 (fp is now 0.0) 

fp=(float)10/20; ==> fp=10.0f/20 ==> fp=0.5f (fp is 0.5)