总结如下几点:
1.补码本身具有幂等性:该特性决定我们虽然运算使用补码,但是通过两次补码可以回到原码;
((X)补)补=X
a+b=(a补+b补)补
2.补码解决了正0 负0的二义性,使0的表示得到统一;
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
3.CPU将加,减法统一为加法运算;
[a-b]补=a补+(-b)补
4.使符号位能与有效值部分一起参加运算,从而简化运算规则。
补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,
可以正常地参与运算。CPU并不知道正负,使其能够按照和无符号数一致的运算规则进行处理;
5.补码使二进制的加、减、移位等操作和十进制具有相同的运算规律;
6.负数-a实际上使用0-a结果,通过二进制运算0-a就是-a的补码,由此可见定义补码就是要求所有算术运算符合现有的运算规律;
------------------------------------------------
补码意义:
所以补码的设计目的是:
⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。
⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、c等其他高级语言中使用的都是原码。
CPU对于补码完全不知情,其只按照指令机械的按照电路设计进行工作,并对某些溢出标志位进行设置;
所有的逻辑由编译器来决定,处理的数是有符号数还是无符号数,有符号数出现溢出怎么处理,这些在编译时已经确定;
编译器送给机器的机器代码中:负数已经进行补码编码,同时编译器负数对负数结果进行转换为原码或10进制数据显示给用户;