我们对于整数之间的计算虽然有时候已经非常熟练,但是,对于比整形(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,让我们继续往下看
以上就是我的对提升与截断的理解,欢迎大家指正。