深入理解补码

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