基本的规则:
①加法:
整数: [A]补 + [B]补 = [A+B]补 (mod 2^(n+1)) |
小数: [A]补 + [B]补 = [A+B]补 (mod 2) |
②减法:
整数: [A-B]补 = [A]补 + [-B]补 (mod 2^(n+1)) |
小数: [A-B]补 = [A]补 + [-B]补(mod 2) |
注:
整数的补码是它本身; |
[-B]补的求法就是 [B]补的连同符号位在内,每位取反,末位加一。 |
Example1:相加 -8到+3(机器数字长为8位)
(+3) 0 0 0 0 0 0 1 1
+(−8) 1 1 1 1 1 0 0 0
----------------------------------
(−5) 1 1 1 1 1 0 1 1
Example2:相加 -5到-2(机器数字长为8位)
(−2) 1 1 1 1 1 1 1 0
+(−5) 1 1 1 1 1 0 1 1
-------------------------------------
(-7)1 1 1 1 1 1 0 0 1 (按模的意义,最左边的1丢掉)
Example3:已知A = -1001,B = -0101,求[A + B]补
过程:
从第一位开始加,1 + 1 = 10(满2进10);
第二位:1+1+1 = 11;
第三位:1 +1 + 0 = 10;
第四位:1 +0 + 1 = 10;
第五位:1 +1 + 1 = 11;
第六位:1,去掉。
4位二进制补码数的数字圆:
可以通过围绕数字圆圈移动来添加或减去数字
- 顺时针添加
- 逆时针减法(添加负数)
Example4:求1,0100011 - 1,1010011
1, 0 1 0 0 0 1 1
- 0, 0 1 0 1 1 0 1
=0, 1 1 1 0 1 1 0
过程:
从第一位开始减,1-1 = 0;
第二位:1-0 = 1;
第三位:0-1 = 1,且第四位有1的负债(不看存款);
第四位:存款是0,负债是1,那么自己就是-1啊,减不动1,于是借来2,先还负债,剩下1,再减1 = 0;
第五位:也负债1,借来1,减的是0所以还剩1;
第六位:本来是1,被第五位借走了,所以只剩0了,减不动1,所以向第七位借来2,减去1还剩1;
第七位:本身是0,被第六位借走了1,所以是-1,要减0,先借来2,还债后剩1,减0还是1
第八位:本身是1,被借走了,好嘛,那就 剩0了,刚好需要减的也是0,不要再往上借了。当然,需要借的时候也行,那个超出 八位以后的东西,从虚空中拿来,不用还!
Reference :