char類型的有符號和無符號

char是很多語言裏的字符類型,比如c++/java。在c++中,char默認是有符號類型(signed)的,但是爲什麼一個字符要分有符號和無符號呢?這有什麼區別或者有什麼意義嗎?我開始的時候也總是不明白。查了很多資料發現一個不錯的解釋,以C++中的char爲例:char類型可以爲負數,但是沒有對應的字符罷了,因爲C++中的字符編碼是ASCII編碼,只有0-127有對應字符。雖然給char類型賦負數值沒有對應字符,但是仍然能轉換成int類型打印出來:

char c = -1;
int i = c;
cout<<i;		//會輸出 -1

至於無符號char類型,也是同樣的,只有0-127內有對應字符,128-255都是沒有對應字符的,但是可以轉爲int輸出。

unsigned char c = -1;
int i = c;
cout<<i;				//會輸出255

爲什麼上面輸出的是255,因爲-1是整數類型,它的位模式爲0xff ff ff ff。將其傳給char類型時,由於char只有一個字節大小,所以大於一個字節的部分會被截去變成0xff。而由於這裏的char時無符號的,所以0xff對應的無符號數爲255.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章