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

DIEA
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個贊
首先要糾正一個錯誤觀念,char
或者unsigned char
本身和ASCII從來就沒有什么對應(yīng)關(guān)系。char
就是一個單字節(jié)有符號整數(shù),unsigned char
就是一個單字節(jié)無符號整數(shù)。這和short
, unsigned short
以及long long
, unsigned long long
之間的關(guān)系是類似的。
而unsigned char
存在的必要性,個人覺得下面這個例子可以從一個側(cè)面來表現(xiàn):
char m = 0xa5; unsigned char n = 0xa5; printf("0x%02hhx\n", m >> 1); printf("0x%02hhx\n", n >> 1);
這個片段的運(yùn)行結(jié)果將是
0xd20x52
而至于ASCII,以我個人的經(jīng)驗(yàn),只有在使用類似putchar
, puts
, printf
時,才會將任何
以整數(shù)形式表示的數(shù)字轉(zhuǎn)換成ASCII(或其他)編碼對應(yīng)的字符,輸出在標(biāo)準(zhǔn)輸出中。例如:
long long a = 0x38; printf("%c\n", a);
這樣的代碼片段也是合法的,且出輸出一個8
。
另外,ASCII也是有多種擴(kuò)展的,在使用擴(kuò)展ASCII時,以個人的經(jīng)驗(yàn),char
和unsigned char
并無明顯區(qū)別。如:
char m = 0xa5; unsigned char n = 0xa5; printf("%c\n", m); printf("%c\n", n);
都將輸出¥
字符。
- 3 回答
- 0 關(guān)注
- 5058 瀏覽
添加回答
舉報
0/150
提交
取消