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.

发布了17 篇原创文章 · 获赞 2 · 访问量 1574

猜你喜欢

转载自blog.csdn.net/lubxx/article/details/105318096
今日推荐