char类型的有符号和无符号

探讨C++中char类型为何分为有符号和无符号,解析其背后的编码原理及意义。了解ASCII编码如何影响char类型,以及不同类型的数字范围和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值