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.