C語言類型轉(zhuǎn)換

類型轉(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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容