计算机中的源码 反码 补码

来源:互联网 发布:淘宝联盟自己买自己的 编辑:程序博客网 时间:2024/04/30 01:40

负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的

假设字长为8bits 要完成,1-1 =0
( 1 ) - ( 1 )
= ( 1 ) + ( -1 )
= (00000001)+ (10000001) -----------------原码计算
= (10000010)= ( -2 )
( 1 ) - ( 2 )
= ( 1 ) + ( -2 )
= (00000001)+ (10000010) -----------------原码计算
= (10000011)= ( -3 )
显然结果不正确.
因为在两个正数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应.
下面是反码的减法运算:
(1)+(-1)
= (00000001)+ (11111110)----反码计算
= (11111111)
= ( 10000000 )
=(-0)有问题
按上面同样的方法计算1-2=-1
1+(-2)
= (00000001)+ (11111101)----反码计算
= (11111110)
= ( 10000001 ) = (-1)正确
补码的加减运算如下:
下面是补码的运算:
( 1 )- ( 1 )= ( 1 )+ ( -1 )
=(00000001)补+ (11111111)补((11111110)+1)(反码加1)
= (00000000)补= ( 0 )正确
( 1 )- ( 2)= ( 1 )+ ( -2 )
= (00000001)补+ (11111110)补
= (11111111)补= ( -1 ) 正确
(-1) = (10000001)原码=(11111110 )反码 =((11111110 )+ 1)补码
由于计算机无法识别负数的加减运算,补码的出现很好的解决了这个问题,可以吧负数转换成可以运算的正数。

0 0