复习到补码的时候,教程都是说按位取反再加一
但是感觉还是不太明白,经过一番搜索之后算是搞明白了
首先要明白2进制的表示
- 首位表示正负
以四位二进制举例
1 | 0=0000 1=0001 |
简单的加法问题 1+(-1)=0
如果-1=1001
,显然1001+0001=1010
≠0000
那么计算一下0-1
0000-0001=1111
不就是0001
按位取反取反0110
,再加1 0111
,在最后变符号1111
得出结论
1 | 0 - 正数 = 负数补码 |
其中0=(max + 1),这里就是
1 | (1111 + 0001) - 正数 |
将正数与0001替换位置,不就是先按位取反,再加1吗
1 | (1111 - 正数) + 0001 |
参考:
https://www.cnblogs.com/guanjianzhuo/p/6017291.html
https://blog.csdn.net/qq_33391629/article/details/79738814