2013-08-25 48 views
-4

該程序將如何執行?該程序如何執行?

#include <stdio.h> 

void main() { 
    char a = 0xAA; 
    int b; 
    b = (int) a; 
    printf("%d\n", a); 
    b = b >> 4; 
    printf("%x", b); 
} 

[問題]

我在發言b = (int)a問題。當a存儲在其中時,您可以給出b的二進制表示嗎?

+0

你想知道哪個部分? – Ryan

+0

我想你需要知道['>>'運營商](http://stackoverflow.com/questions/17769948/what-does-this-operator-mean-in-c/17769959#17769959)和'a = 0xAA' =='10101010' in binary –

+2

爲什麼不只是[自己運行,看看](http://ideone.com/zaBjWo)? –

回答

1

對於語句b = (int)a;,我們將char改爲int。假設char是隱含簽署(NB:並非總是如此),而且int爲32位,那麼char價值0xAA被拉開了與符號擴展,所以0xAA變得0xFFFFFFAA這相當於十進制-86

+1

@Grijesh:演員中沒有UB。如果你的意思是:'b = b >> 4;'那麼*實現定義*行爲,而不是未定義的行爲。 –

+0

@Parul是的,我意識到,所以我刪除了我的評論謝謝。 –

0

如果你想知道什麼,控制檯將輸出,這裏是我得到:

-86 
fffffffa 

如果您想怎麼看測試用例使用類似this執行試的未來。

1
char a = 0xAA; // line 1 
int b; // line 2 
b = (int) a; // line 3 
printf("%d\n", a); // line 4 
b = b >> 4; // line 5 
printf("%x", b); // line 6 

1行:從十六進制

2行分配字符給char類型的可變a:聲明變量int

3號線b:由類型轉換到從指定的char acharint。它會輸出一個int值。

4行:輸出的char一個在INT格式

第5行的值:重新分配由右B的值將其移動至4

線6:B的輸出值十六進制格式。所以產出應該在某種程度上。 FFAA454喜歡。

這就是你的代碼是如何工作的。