在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C/ c語言中unsigned char的意義何在

c語言中unsigned char的意義何在

C語言中字符變量代表一個(gè)ASCII字符,ASCII碼的范圍在0-127
即便是無符號,也是0-255,然而128-255之間代表什么字符呢?
既然無法代表字符,那么unsigned char又有什么意義呢?
求解,謝謝諸位

回答
編輯回答
祈歡

首先ascii的范圍顯然不在0-127 小寫a已經(jīng)是 0x97 了 <- 顯然記錯(cuò)了

2018年3月10日 05:29
編輯回答
安于心

首先要糾正一個(gè)錯(cuò)誤觀念,char或者unsigned char本身和ASCII從來就沒有什么對應(yīng)關(guān)系。char就是一個(gè)單字節(jié)有符號整數(shù),unsigned char就是一個(gè)單字節(jié)無符號整數(shù)。這和short, unsigned short以及long long, unsigned long long之間的關(guān)系是類似的。
unsigned char存在的必要性,個(gè)人覺得下面這個(gè)例子可以從一個(gè)側(cè)面來表現(xiàn):

    char m = 0xa5;
    unsigned char n = 0xa5;
    printf("0x%02hhx\n", m >> 1);
    printf("0x%02hhx\n", n >> 1);

這個(gè)片段的運(yùn)行結(jié)果將是

0xd2
0x52

而至于ASCII,以我個(gè)人的經(jīng)驗(yàn),只有在使用類似putchar, puts, printf時(shí),才會(huì)將任何以整數(shù)形式表示的數(shù)字轉(zhuǎn)換成ASCII(或其他)編碼對應(yīng)的字符,輸出在標(biāo)準(zhǔn)輸出中。例如:

    long long a = 0x38;
    printf("%c\n", a);

這樣的代碼片段也是合法的,且出輸出一個(gè)8。

另外,ASCII也是有多種擴(kuò)展的,在使用擴(kuò)展ASCII時(shí),以個(gè)人的經(jīng)驗(yàn),charunsigned char并無明顯區(qū)別。如:

    char m = 0xa5;
    unsigned char n = 0xa5;
    printf("%c\n", m);
    printf("%c\n", n);

都將輸出字符。

2017年11月26日 02:31