什么是补码

补码
用补码表示带符号的二进制数时,符号位与原码、反码相同,即用0表示正,用1表示负;数值位与符号位相关,正数补码的数值位与原码、反码相同。而负数补码的数值位是真值的数值位按位变反,并在最低位加1。
1.小数补码的定义
设二进制小数X=±0.X-1X-2…X-m,则其补码定义为:


例如,X= + 0.1011时,根据以上公式可得[X]补= 0.1011;X = – 0.1011时, 根据以上公式可得[X]补 = 2 + X = 10.0000 – 0.1011 = 1.0101。
小数“0”的补码只有一种表示形式,即0.0…0。
2.整数补码表示法
设二进制整数X=±Xn-1Xn-2…X0,则其补码定义为:
例如,X = +1010时,根据以上公式可得[X]补 = 01010;X =–1010时,根据以上公式可得[X]补 = 25 + X = 100000–1010 = 10110。
同样,整数“0”的补码也只有一种表示形式,即00…0。
采用补码进行加、减运算时,可以将加、减运算均通过加法实现,运算规则如下:
[X1 + X2]补 =[X1]补 +[X2]补
[X1–X2]补 =[X1]补 +[–X2]补
运算时,符号位和数值位一样参加运算,若符号位有进位产生,则应将进位丢掉后才得到正确结果。
例如,若X1 =–1001,X2 = +0011,则采用补码求X1–X2的运算如下:
[X1–X2]补=[X1]补+[–X2]补= 10111+11101
即:[X1–X2]补= 10100
由于结果的符号位为1,表示是负数,故X1–X2 = –1100。
综合比较原码、反码和补码的运算方法可以得出采用补码进行加、减运算最方便。
已知一个数的补码,求原码的操作分两种情况:
 如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
 如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1;其余各位取反,然后再整个数加1。
例如,已知一个补码为11111001,它的第一位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,最终得到该数的原码为10000111(–7)。
注意:引入补码后,将减法运算转化为易于实现的加法运算,且符号位也当作数据相加,从而可简化运算器的结构,提高运算速度。因此,在微型计算机中,有符号数通常都用补码表示,得到的是补码表示的结果。但当字长由8位扩展到16位时,对于用补码表示的数,正数的符号扩展应该在前面补0,而负数的符号扩展应该在前面补1。如机器字长为8位,[+46]补=00101110B,[-46] 补=11010010B,从8位扩展到16位后,[+46]补= 0000 0000 0010 1110B=002EH,[-46]补= 1111 1111 1101 0010B=FFD2H
表2-2是8位二进制数的原码、反码和补码对照表。
表2-2   8位二进制数的原码、反码和补码对照表

 


二进制数码

   

    

    

    

00000000

0

+0 

+0 

+0

00000001

1

+1 

+1 

+1

00000010

2

+2 

+2 

+2

      :       

:

:

:

:

01111110

126

+126

+126

+126

01111111

127

+127

+127

+127

10000000

128

– 0

-127

-128

10000001

129

-1

-126

-127

10000010

130

-2

-125

-126

      :       

:

:

:    

:

11111110

254

-126

-

-2

11111111

255

-127

-

-1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值