补码经过运算,出现的进位,是必须舍弃的。
一个补码,必须取“约定的位数”,常用有八位、16 位数。。。
运算后,进位是 1 是 0,都不在“约定位数”中,所以是无用的。
-------------------------
在计算机中,借助于补码,那么,负数和减法,都可以转化成加法来进行运算。
使用这种方法的目的就是:简化计算机的硬件。
在计算机中,只有补码,并没有原码和反码。
补码和负数,有一一对应的关系,可以直接转换,并不需要通过原码反码。
那么,“原码反码取反加一”这些,都是垃圾知识,都是无用的。
-------------------------
计算机中所能计算的位数,是固定的,如八位机、16、32、64 位机。
位数限定之后,减去某个数,就可以用加上其补数,来完成。
如在两位十进制中,减一,就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位一百,只取两位,这两个算法,结果就是相同的。
一百,就是两位十进制的计数周期:10^2。
99,就是-1 的补数。 求解公式: 补数 = 周期+负数。
上过中学的同学,都知道,三角函数的周期是:2π。
在-π/2 的函数值,与 +3π/2 ( =2π-π/2 ) 处相同。
那么,-π/2,就可以用 +3π/2 来代替。
懂了这些,也就懂了补码。
补码,原理很简单!扯出原码反码,只能说是故弄玄虚而已。
-------------------------
计算机用二进制,补数,就改称:补码。
八位二进制是 0000 0000 ~ 1111 1111(十进制255)。
其计数周期是:2^8 = 256。
那么,[-1]补 = 256-1 = 255 = 1111 1111(二进制)。
如用“原码反码取反加一”来做,也是这个结果。
求负数八位补码的通用计算公式: 补码 = 256 + 负数。
-------------------------
在八位补码中,用 128~255 代表 128 个负数-128~-1。
而 0~127,这就是本来的正数,不需要任何转换。
有人说“正数的原码反码补码,都相同”,其实,这是误导。
正数,其补码都不存在,更别说计算机中不存在的原码反码了。
-------------------------
借助于补码,负数和减法,都可以转化成加法来进行运算。
那么,计算机的硬件,就可以简化了。
因此,计算机只有加法器,并没有减法器。
1.对于正数,也就是第一位的符号位为0,反码,补码,原码相同
2.对于负数,补码和原码的关系是原码除符号位的其他位取反后加1.
如101010的补码即为:
2.1.先除去符号位的其它位取反得:110101(这个称为原码的反码)
2.2.再加1,得:110110
3.几个规定:
,3.1 [+0]反=00000000,[-0]补=[+0]补=00000000,[-0]反=10000000,[-0]原=10000000,[+0]原=00000000
3.2 原码和反码的表示范围是:-2^(n-1)
补码的话,直接把二进制表示相加就可以了。
因为是正数和负数相加,还不用考虑溢出的问题。