浅谈整型提升与截断

我们对于整数之间的计算虽然有时候已经非常熟练,但是,对于比整形(4字节)小的类型计算还是需要万分的注意小心的比如char(1字节)。

让我们来看代码

int main()
{
	char a = 2;
	char b = 126;
	char c = a + b;
	printf("%d\n", c);
	return 0;
}

看完上面的代码,有马虎的老铁肯定会说是128,但是事实上真的是这样吗,我们执行一下看答案。

 我们看到执行后的答案是  -128,就这个答案我们来讨论一下,为什么会得到这个答案?

我们上面是a和b的二进制数:

1.char是8个比特位

2.在内存中存的是二进制的补码

3.正整数的补码反码补码相同

 到这里我们计算出a+b是128,但是别忘了,我们计算后的结果是要存入char c中 所以发生了截断

 因为c 的类型是char的,所以只能存储8个比特位,只能对a+b进行截断,最后导致C中存储的是 1000 0000

但是到这里还不是最后的答案-128,让我们继续往下看

以上就是我的对提升与截断的理解,欢迎大家指正。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值