二进制的相反数为什么是按位取反加1,补码来源

为了区分正负,二进制数用最高位来表示符号,1为负,0为正。用8位二进制数举例,0000 0001=1,1000 0001=-1。

十进制中相反数直接在数字前加负号就可,那么二进制的相反数怎么求呢?不管是十进制还是二进制,相反数的意义都是指:该数+该数的相反数=0。比如 0000 0011 + 它的相反数 = 0000 0000 ,那么 0000 0011的相反数=0000 0000 - 0000 0011 = 1111 1101,直观上理解就是一个数的相反数=对该数按位取反再加1。

下面从理论推导一下:对于某个不为0的二进制数来说,该数+它的相反数=0000 0000,那么该结果一定是由于进位溢出造成的(用二进制相加看,不要用十进制看),相当于1111 1111 + 0000 0001 = 0000 0000,用未溢出的值代替0000 0000,即 该数 + 它的相反数=1111 1111 + 0000 0001,-->  它的相反数 = 1111 1111 - 该数 +0000 0001,1111 1111 - 该数 就相当于对该数按位取反,所以二进制数的相反数就是对其按位取反加1。

我们自己理解的话0000 0011=3,它的相反数为-3=1000 0011,但0000 0011 + 1000 0011 != 0000 0000,所以计算机就引入了补码,相当于上面的相反数的表示。将人容易理解的二进制称为原码,计算机实际使用时用的是补码。正数的补码就是自己,负数的补码为按位取反加1。

对于1000 0011来说,若其为原码,则表示-3;若其为补码,则表示(-1)*2^7 + 1*2^1 + 1*2^0 = -125。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值