深入理解补码

CSAPP关于补码的章节并不好。自己总结一下
原码:

在这里插入图片描述
反码:
在这里插入图片描述
补码:
在这里插入图片描述
如果在上面补码的图上,把无符号数的图加上去。就会发现
对同一个大于10000000的码值,有符号的值是对应的无符号值减去256
CSAPP中提供的计算公式本质上也是这一点的体现。

补码的作用:
所以在无符号数的框架中。翻转每一位,并加1。(这是由补码的性质决定的。如果是反码,就只需要反转就行)
反转的性质有利于加法
如果计算机用一个加法器可以实现其它运算,其它的“加法器”、“减法器”或者“乘法器”也就没有必要了,这样还能使电路的设计更简单。所以,计算机把相应的减法变成加法,可以简化计算。
我们发现,一个数减去另外一个数,与它加上“另外一个数的补码再加1”结果是一样的。
5=0000 0101
3=0000 0011
3的补码是1111 1100
3的补码加1是1111 1101
所以5 - 3 = 5 + 3的补码 + 1
在这里插入图片描述

反转每一位加1 = 0011 + 1100 + 1 = 10000
上面两点又得到了印证

参考
https://zhuanlan.zhihu.com/p/36036038

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值