char是很多语言里的字符类型,比如c++/java。在c++中,char默认是有符号类型(signed)的,但是为什么一个字符要分有符号和无符号呢?这有什么区别或者有什么意义吗?
我开始的时候也总是不明白。查了很多资料发现一个不错的解释
以C++中的char为例:因为C++中的字符编码是ASCII编码,只有0-127有对应字符。而0-127只需要7个bit位就可以表示了,但是计算机存储一般用字节作为最小单位会比较高效,所以char类型是用一个字节存储的,那么多出来的那一个比特位就可以用于表示正负号。当使用有符号的char类型时,char对应的二进制数字范围是 [-128, 127] ,虽然负数部分没有对应的字符,但是仍然能转换成int类型打印出来:
char c = -1;
int i = c;
cout<<i; //会输出 -1
至于无符号char类型,也是同样的,对应的二进制数字范围是 [0, 255] ,其中128-255都是没有对应字符的,但是可以转为int输出。
unsigned char c = 255;
int i = c;
cout<<i; //会输出255
但是,还有一个疑问,为啥多出来一个比特位就一定要用于表示符号,多出来的那个比特位直接无视不好么。
我猜测是c++比较nb,为了实现更多的功能hhhhh