一篇搞懂关于计算机的减法运算

  • 减法
    • 相减结果为正的减法
    • 相减结果为负数的减法

减法

相减结果为正的减法

如下一篇拙言,是自己平时的总结,如有错误欢迎各位大佬指正。

相信你一定听说过,补码,取反加一等等关于介绍减法的词汇和语言,下文将使用最“啰嗦”最经典的方法带你们彻底了解计算机减法的世界。

因为减法有时需要进行借位,且过程繁琐,因此需要对其进行简化。

例如 245-158 在进行计算时

  245-158
= 245-158+999+1-1000
= 245 + (999-158) + 1 - 1000

你可能会像这不依然需要使用减法吗?反而使步骤变得更加繁琐!!!
但是你可能忽略了最重要的一点这种方法不需要麻烦的使用借位来进行运算了
你可能又会觉得这又有什么用……
那就请各位看官用另一个角度来进行思考

我门进入二进制的世界来思考这个问题
首先给出245158的二进制表示:1111 0101b1001 1110b

我们使用同样的思路将二进制的减法进行转化

  1111 0101-1001 1110
= 1111 0101-1001 1110+1111 1111+1-1 0000 0000
= 1111 0101 + (1111 1111-1001 1110) + 1 - 1 0000 0000

如果大家还是不能看出其中端倪,依旧觉着还是需要设计减法电路来进行减法运算,那就请听我细细说来
如果你突然间,一不小心发现如下的一个事实,那你就全懂了

1111 1111-1001 1110的运算过程中
每一位进行相减时,只要减数是1那么结果就是0,只要减数是0那么结果就是1.
根据这个规律,我们只需要看着10011110这个数就能马上知道结果是01100001,这两个数正好是取反的
我们将结果和一开始的被减数(1111 0101)进行相加将会得到结果(1 0101 0110)在加1得到1 0101 0111
在减去1 0000 0000就是上面计算的最终结果
但是对于8位二进制的运算,最高位的1其实已经溢出了,本身就是无效的
因此在二进制中加完后我们只需要取得和原先相同数据长度的低位就完成了上述的减法运算

在数字电路中取反运算那简直是太简单了

因此在二进制的世界中减法已经被完全被加法所替代

换句话将,如果你已经设计出了一个二级制加法器后,你愿意花费更多的时间去设计带借位输入和输出的减法器,还是愿意设计一个取反电路???

如果你足够细心,相信你已经发现了,上述中999-158的结果其实就是一个补数对9的补数,而1111 1111-1001 1110的结果其实就是一个对1的补数,虽然我并没有阐述补数的定义相信大家大致已经明白了什么是补数。

好了,罗里吧嗦了一大堆,最后感谢可以耐心看完的每一位读者!!!


嘿嘿(●ˇ∀ˇ●),你以为这就结束了?
大家设想一下如果将上面的减数和被减数翻过来呢变成158-245
相信以大家的聪明才智,都明白了吧,好本章到此结束。

开个玩笑,好了,我知道了,你不用问了,我不认为自己有多幽默!!!

问题来了负数怎么办???

相减结果为负数的减法

依然如此,老规矩咱们先走一下上一张的流程

  158-245
= 158 + (999-245) + 1 - 1000
= 158 + (999-245) - 999
= 158 + 754 -999
= 913 - 999
= ???

于是突然发现,好像上一章使用反相器和加法器替代减法突然变成了扯淡一般,这**不是逗我玩儿吗???

于是突然间觉得事情好像没那么简单,但仿佛又没那么难
我们只需要找到一种表示负数的方法即可继续想办法进行操作,再书写中只需要在前面加一个 - 号即可,可是再计算机中如何存储呢?
又如何通过数字电路中表示呢?

当然我们可以使用一个二进制来表示负号例如使用0表示后面的二进制为正数,使用1表示后面的二进制为负数。
可这是远远不够的,因为你还是需要设计有一个电路来实现正数和负数的相加,而且你还需要设计电路来识别这是正数还是负数,尽管识别电路是比较简单的判断最高位是0或是1即可。

未完待续!

一篇搞懂关于计算机的减法运算相关推荐

  1. python 类-Python入门--一篇搞懂什么是类

    原标题:Python入门--一篇搞懂什么是类 写一篇Python类的入门文章,在高级编程语言中,明白类的概念和懂得如何运用是必不可少的.文章有点长,3000多字. Python是面向对象的高级编程语言 ...

  2. 一篇搞懂OOA/OOD/OOP的区别

    文章目录 OOA OOD OOP 总结 相关文章: 一篇搞懂OOA/OOD/OOP的区别 面向对象的基本原则-抽象,封装,继承,分解 GRASP模式概述 面向对象的六大原则 OOA什么鬼,OOD又是什 ...

  3. C++ 一篇搞懂多态的实现原理

    C++ 一篇搞懂多态的实现原理 虚函数和多态 01 虚函数 在类的定义中,前面有 virtual 关键字的成员函数称为虚函数: virtual 关键字只用在类定义里的函数声明中,写函数体时不用. cl ...

  4. 一篇搞懂微信小程序以及和其他对比

    一篇搞懂微信小程序以及和其他对比** 前两年的文章了,现在小程序肯定是有变化的,作为自己的随记 一.产品定位及功能分析** 微信小程序是一种全新的连接用户与服务的方式,他可以在微信内被便捷的获取和传播 ...

  5. 卫生系统计算机考试内容,2021年卫生资格考试题型是什么样的?一篇搞懂!

    根据中国卫生人才网发布的考试通知可知,2021年卫生资格考试除护理学初级(师)专业采用纸笔作答方式进行考试外,其余116个专业均采用人机对话方式进行.那么,什么是人机考试呢?能提前练习吗?为了解决大家 ...

  6. tcp 二次握手时延_一篇搞懂TCP的三次握手 四次挥手

    TCP的三次握手四次挥手,估计大家都听过.但是真的能把每一步说明白的人比较少.我还记得在之前面试的时候被面试官一顿问,然后一脸懵B... 都是大学没好好上课 ,这篇文章就跟大家讲讲到底这三握四挥是在搞 ...

  7. 一篇搞懂Java多线程运行机制

    文章目录 前言 线程 并发和并行 Runnable接口 Thread类 线程的创建 原理和注意事项 为什么不直接调用run方法? 线程终止和中断 用户线程和守护线程 代码演示 前言 Java是一种支持 ...

  8. 基于IIC通信的显示器OLED编程详解(一篇搞懂)

    前言: 上一篇博客介绍了IIC通信,这篇我们就来玩玩oled模块.当然选用的是IIC接口,因为市面上还有一种是SPI接口的.对于oled长啥样,采用了什么材料,工艺怎么怎么样等等这里就不作任何介绍,搞 ...

  9. python文件打开模式rb表示只读模式打开文件_一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)...

    关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.各模式逐个分解 'r':只读. ...

最新文章

  1. 安装高可用性虚拟机,livemigration系列之九
  2. 我这样理解技术人的成长过程
  3. springboot报错---@RunWith(SpringRunner.class)
  4. Relatively Prime Powers CodeForces - 1036F (莫比乌斯函数容斥)
  5. fastclick select 闪退 bug
  6. [置顶]       ibatis框架----控制台输出SQL语句
  7. Python自动化运维_批量执行py脚本
  8. QT常用控件——QLabel标签控件
  9. JAVA日志框架与日志系统
  10. python search函数_python 正则表达式 (search与match函数)
  11. ORACLE 按照指定的ID 顺序排序
  12. Windows安装--cerebro
  13. python里怎么使用snip_MacOS下好用的截图软件snip
  14. PHPMyWind支持ppt上传
  15. error: cannot use promoted field in struct literal of type [duplicate]
  16. 0x0B-HackTheBox-Obscurity
  17. IE浏览器无法上网设置
  18. Linux基础命令学习——方法二(给swap分区增加500M)
  19. Grads转成Netcdf
  20. sql server 符号函数sign

热门文章

  1. 牛逼的uniapp+Java微信小程序商城来了
  2. Google Play开发者账号注册 最新攻略
  3. c语言define易错点
  4. hive分区、数据加载、数据导出、数据类型
  5. Axure RP9教程 音量滑块
  6. sqlserver的TCP/IP 连接失败解决办法
  7. 增值电信全网呼叫中心95号码申请条件及材料详解
  8. IT相关的术语(O2O、C2C、B2B、B2C…等等…)通俗解释
  9. 牛客国庆集训派对Day5 数论之神
  10. 克莱姆法则与雅可比行列式