补码 与反码
计算机中一般采用补码的形式来简化减法运算和逻辑运算。在电路功能实现是,简化减法运算可以减少多余的电路,降低了复杂度。每个进制系统都有两种类型的补码:基数补码和基数减1补码(基数反码)。
1.基数反码
定义:对于一个数字:有n位,且进制是r,的数字是N,其反码的定义是(rn -1)-N ;例如对于546700的反码的运算就是
106-1 =999999;
999999-546700=453299;
二进制的反码 :对于10001
Rn-1即10000-1=1111
1111-10001=01110=1110
对于任意n位,相当于n个1-N ;1-1=0;1-0=1所以相当于 求反操作。1改为0,0改为1。
- 基数补码
定义:对于一个数字:有n位,且进制是r,的数字是N,其反码的定义是rn -N
对于一个十进制便就是10n-N
012398的补码就是100000-012398=987602
二进制的补码:
对于1101100的补码就是0010100
快捷方法: 不改变最低位的0和第一出现的1
- 补码的减法
利用借位概念的直接减法在小学就教过了。这种方法是,当被减数比减数小时高位借一个1。人们用纸和笔来进行减法运算时,这种方法确实很好,而要用硬件来实运算时,就较为复杂了,不如补码的算法。
两个有n个数字的进制的无符号数减法M-N可按以下步骤来进行:
1)将被减数M与减数N的补码相加,即
M+(rn-N)=M-N+rn
2)If(M>=N)加起来的结果本身就会产生rn的进位,所以可以要减去rn的进位,及忽略左边第一位
3)else 不会产生进位rn-(N-M)也就是N-M的基数补码,所以在结果前加负号。
- 利用二进制反码来进行无符号减法
前面以及知道,反码比补码少1,因此,将被减数与减数的补码的相加产生的和,只有当末端进位时,该数比正确结果少1,既不与需要加1了。
原文地址:https://www.cnblogs.com/king0/p/10369112.html