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.