有(无)符号char型及其溢出问题

本文介绍了C/C++中的char类型分为有符号和无符号两种,详细阐述了它们的取值范围和溢出情况。当进行加减运算时,无论是有符号还是无符号char,都会在最后8位进行操作,导致可能的溢出。无符号char前24位始终为0,有符号char的前24位与倒数第8位相同。
摘要由CSDN通过智能技术生成

转载自:http://blog.sina.com.cn/s/blog_70ec9a6f01014j1h.html

1char的有无符号类型

char 分为有符号性(signed)和无符号型(unsigned)两种:

Ø         若是signed型,就意味着取值范围为[-128,127];

Ø         若是unsigned型,就意味着取值范围为[0,255];

C语言中我们通常直接用类型char,但是它究竟是被当做signed型还是unsigned型,由编译器决定。

C语言允许我们在char前面加上关键字signed或者unsigned,这样,无论在编译器中被当做signed还是unsigned,都会按照前面加的这个关键字来决定。

例如:假设我们现在使用的编译器,把char当做signed来看到,则

char c1;

signed c2;

unsigned c3;

c1和c2的取值范围都是[-128,127],而c3的取值范围则是[0,255]。

所谓取值范围,是指其值在这个范围之内时,会被正确处理,超出这个范围就会发生溢出。但在这个范围之内,并不意味着它就是可打印字符。这点不要混淆。

 

2、溢出

1)有符号

c1和c2一样,我们以c1为例来说明。先看向上超过上界的情况:

十进制

十六进制

二进制

126

0000007e

0…0 0111 1110

126

127

0000007f

0…0 0111 1111

127

128

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值