類型轉(zhuǎn)換
代碼如下
int main(int argc, const char * argv[]) {
int a = 0xABCD07; // 0000 0111 最低位的一個(gè)字節(jié)
int b = 0xABCD77; // 0111 0111
int c = 0xABCD87; // 1000 0111
int d = 0xABCDF7; // 1111 0111
char *a1 = (char*)&a;
unsigned char *a2 = (unsigned char*)&a;
char *b1 = (char*)&b;
unsigned char *b2 = (unsigned char*)&b;
char *c1 = (char*)&c;
unsigned char *c2 = (unsigned char*)&c;
char *d1 = (char*)&d;
unsigned char *d2 = (unsigned char*)&d;
printf("%08x, %08x\n", *a1, *a2); //注意char*轉(zhuǎn)換時(shí)符號(hào)位擴(kuò)展
printf("%08x, %08x\n", *b1, *b2);
printf("%08x, %08x\n", *c1, *c2);
printf("%08x, %08x\n", *d1, *d2);
return 0;
}
運(yùn)行結(jié)果

運(yùn)行結(jié)果
注意char* 和 unsigned char*的打印結(jié)果的不同
對(duì)于一個(gè)char類型的變量來說,最高位是符號(hào)位,低7位才是數(shù)據(jù)位,所以,對(duì)于上邊的c和d,最低一字節(jié)的第八位是1,所以對(duì)于printf用%08x的時(shí)候,c1和d1會(huì)對(duì)最高位的符號(hào)位1做符號(hào)位擴(kuò)展,所以打印出來的會(huì)是fffffff7.