补码原理理解
今天上课灵机一动想到了补码的原理
什么是补码
补码是由原码变换而来,原码就是带符号的二进制数。正数的补码与原码一样,负数的补码是由原码取反(除了符号位)后加一得到的。
举个例子:
正数 1 的原码为:0000 0001
对应的补码为:0000 0001
负数 -1 的原码为:1000 0001
对应的补码为:1111 1111
补码的用处
补码自然是有用的,计算机中的加法运算依靠加法器完成,如果要进行减法,重新设计一个减法器并不理智。而补码的关键作用在于将减法变成了加法。
对于 2 - 1来说,转换成二进制便是0000 0010 - 1000 0001,那么运用补码就会变成0000 00010 + 1111 1111。意思就是,A - B,等于A + (-B)的补码。
0000 0010 - 1000 0001 = 0000 0001(原码的符号位不参与运算)
0000 0010 + 1111 1111 = 0000 0001(计算过程中的进位溢出舍去,补码的符号位也参与运算)
补码的原理
补码的原理很简单,对于一个二进制减法0000 0002 - 0000 0001 = 0000 0002 + (1 0000 0000 - 1) = 0000 0002 + 1111 1111
这里将 -1 变成了1 0000 0000 - 1,因为0000 0002只有八位,加上一个9位的数会溢出,并没有影响。所以等价于加上负数的补码。
所以对于一个N位的负数B来说,补码的获取方式实际上是用2^N - B的绝对值。