該程序將如何執行?該程序如何執行?
#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
的二進制表示嗎?
該程序將如何執行?該程序如何執行?
#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
的二進制表示嗎?
對於語句b = (int)a;
,我們將char
改爲int
。假設char
是隱含簽署(NB:並非總是如此),而且int
爲32位,那麼char
價值0xAA
被拉開了與符號擴展,所以0xAA
變得0xFFFFFFAA
這相當於十進制-86
。
@Grijesh:演員中沒有UB。如果你的意思是:'b = b >> 4;'那麼*實現定義*行爲,而不是未定義的行爲。 –
@Parul是的,我意識到,所以我刪除了我的評論謝謝。 –
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 a
值char
至int
。它會輸出一個int值。
4行:輸出的char
一個在INT格式
第5行的值:重新分配由右B的值將其移動至4
線6:B的輸出值十六進制格式。所以產出應該在某種程度上。 FFAA454喜歡。
這就是你的代碼是如何工作的。
你想知道哪個部分? – Ryan
我想你需要知道['>>'運營商](http://stackoverflow.com/questions/17769948/what-does-this-operator-mean-in-c/17769959#17769959)和'a = 0xAA' =='10101010' in binary –
爲什麼不只是[自己運行,看看](http://ideone.com/zaBjWo)? –