二进制底层加减法的实现原理

计算机底层存储的基本单位为bit 也就是0与1,数字的表示也是以一串二进制来表示。那么如何通过一连串的二进制来完成计算器的计算功能呢?

何为原码反码补码?

在了解底层加减法之前,先了解下原码反码与补码的区别

整数分为正整数与负整数

怎样根据二进制设定一个数是正数还是负数?根据首位符号:0表示为正数,1表示为负数

正整数的原码反码与补码相等

eg: 1的原码 0000 0001  反码:0000 0001   补码:0000 0001

负整数的原码符号位不变,其他位取反,则为负整数的反码,补码在反码的基础上再加1。

eg:   -1的原码 1000 0001  反码:1111 1110  补码:1111 1111

加减法运算

接下来我们通过一个例子1+(-3)来了解底层如何实现加减法(乘除法同理)

由于计算机存储的二进制都为补码,因此在操作之前先计算出1与-3的补码

1: 原码:0000 0001,反码:0000 0001  ,补码:0000 0001

-3:原码:1000 0011 ,反码:1111 1100  ,补码:1111 1101

加减法计算大体分为5部分:

1.求异或^

首先对这俩数求异或操作求值;(啥是异或,俩数的对应位做比较,如果不相等则结果为1,相等则为0)

0000 0001
1111 1101
---------^
1111 1100   

求出该值之后记录下来,后边会用到!! 

 

2.求与结果&

紧接着对这俩数进行与操作(对应位的俩数都为1则结果为1,否则都为0),如果求出的与结果为0,则俩数相加结束,计算的结果为上一步的异或所求出的值。如果不为0,则表示需要进位,则对异或的结果进行左移一位操作

0000 0001
1111 1101
---------&
0000 0001   

3.左移操作<<

如果第2步与的结果不为0,则左移一位如下所示:

0000 0001
--------- <<1
0000 0010  

4.求异或^

紧接着将该值与上一步求出来的异或的结果再次进行异或操作

1111 1100
0000 0010
---------^
1111 1110  

5.验证

同2一样,对俩数进行与操作,如果与操作的结果为0,则表示运算结束,结果为上一步的异或值,否则继续重复步骤2

1111 1100
0000 0010
---------&
0000 0000

由于求与的结果为0,则不存在进位,则计算结束,最终的结果为1111 1110;

补码:1111 1110  转为反码(减一):1111 1101   转为原码(符号位不变,其他位取反):1000 0010 转为10进制:-2

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值