补码的加减乘除和移位

我们知道计算机的符号数有三种表示方法:原码,反码和补码。它们分为符号位和数值位,通常符号位为最高位,且0表示正,1表示负。注意符号位在移位时是不变的,在取补码时是变的。且正数补码等于原码


以-3为例求补码:

3的原码是0b0011

反码是0b1100(所有位取反)

补码是0b1101(反码+1)


补码加法:

[X+Y]补 = [X]补 + [Y]补

例如X= +0011 0011 = 51, Y = -0010 1001 = -41

[X]补 = 0011 0011, [Y]补 = 1101 0111

[X+Y]补 = [X]补 + [Y]补 = 0011 0011+1101 0111 = 0000 1010= 10


补码减法:

[X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补

例如1 - 1 = 1 + (-1),与补码加法类似,相信大家能理解。


补码乘法:

机器只能进行正数运算,因此当x为负数时,就将它变为正(负数的补码),即[X*Y]补== 【[X]补】补 × [Y]补,所得结果再取补码

例如原码x = -0011 = -3, y= +0011 = +3

[X]补 = 1101,【[X]补】补= 0011

[x*y]补 = [0011 * 0011] 补= [01001]补 = 10111 = -01001 = -9


补码除法:

[X/Y]补 = [X]补 / [Y]补

例如原码x = -0011 = -3, y= +0011 = +3,同样负数要变为正

[X]补 = 1101,【[X]补】补= 0011, [Y]补 = 0011

[X/Y]补 = [0011 / 0011]补 = 1111 = -1


补码移位:

符号位在移位时是不变的,正数左右移位都补0,负数向右移位空出来的位补1,左移空出来的位补0。

例如x = -0001 = 1111,

右移1位(相当于除以2)是1111 = -0001 = -1,因为1除以2余1

左移1位(相当于乘以2)是1110 = -0010 = -2


为什么负数向右移位空出来的位补1,左移空出来的位补0呢?

笔者的理解如下:先把负数取补码(变为正数),正数右移一位相当于除以2,此时补0,最高位便是0,再取补码,最高位变为1,因此负数补码右移要补1。而正数左移一位相当于乘以2,此时补0,最低位便是0,再取补码(取反并加1),最低位变为0,因此负数补码左移要补0。


笔者对补码也是刚开始思考,也许会有错误,欢迎各路大神勘误,不胜感激

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值