计算机中的加减乘除都是经过加法实现的,那么你确定很好奇,加法和减法是彻底不一样的操做啊,如何用加法来进行减法运算呢?下面我就经过几个例子,来解释一下具体的操做过程。web

二进制加法

开始以前,咱们先复习一下最简单的二进制的加法是如何运算的:

编程

二进制是逢二进一,1001+1101=10110  最高位直接进一位就好了。微信

十进制减法

大数减少数

咱们来看一个十进制减法的例子:

251-174=77,很简单是否是?小学低年级的题目,个位不足向十位借位,十位不足向百位借位,咱们是这么口算的。编辑器

这里用到了借位,若是咱们不使用借位,能不能计算减法呢?spa

为了便于说明,咱们先复习一下,减数,被减数,差的概念:

为了不借位,咱们用如下步骤来计算:首先先用999减去减数174,获得差825:

而后用被减数251加上差825,等于1076:

最后,因为刚才第一步多借了999,如今要把多出来的999减掉。为了不借位,咱们在多加一个1,999+1=1000 凑成 1000,而后减去1000,这样从头至尾就不会涉及到借位的问题。

.net

整个公式就是:251 + (999 - 174)+ 1 - 1000 = 77 你有没有发现,这样就把借位的问题避开了哦。设计

小数减大数

若是是174-251该怎么办呢?

状况稍有不一样,前面的步骤仍是同样的。先用999-251=748

而后用被减数174加上差748,等于922:

按照前面的例子,如今应该是 922 + 1 - 1000 了,可是这样就涉及到借位了,这里咱们要变通一下,直接用999 - 922,而后在结果前面加个负号:

999 - 922 = 77,咱们直接在77前面加个负号,-77就是正确结果啦,这样咱们就能够避开借位问题啦。blog

二进制如何表示负数呢?

二进制表示正负数时,通常会把最高位当作符号位,符号位0表示正数,1表示负数,那么-1用二进制怎么表示呢?ci

1用二进制表示为00000001,因此推算一下-1应该就是10000001吧?get

让咱们来验证一下,看看对不对,十进制 1 +(-1)= 0,二进制 00000001 + 10000001 = 10000010 很明显不等于0 啊。

咱们知道二进制1是00000001,那么咱们倒推一下,00000001加上什么数会等于00000000呢?

想来想去都想不到啊,不知道你有没有发现,计算机是没有减法运算的,计算机的减法是经过加法实现的,那么加法怎么能达到减法的效果呢?

咱们看下这个例子:

1 00000000超出了一个字节的范围,最高位1被舍弃,剩下的就是 00000000,这就是十进制的0啊,推理可得-1用二进制表示就是11111111,好神奇。

「原来二进制的负数表示叫作补码,补码的转换规则是正数的取反再加1」,好比:00000001 取反就是 11111110,而后再加1就是11111111,这就是-1的二进制表示了。

「仔细想一想所谓补码,就是加起来等于11111111的码啊,而后再加1,最高位溢出后,不就等于0了吗,一个和原来的数加起来等于0的数不就是它的负数吗?」

这么想是否是就容易理解了呢?

换个角度看看,-174的补码就是(999-174)+ 1 = 826 ,174 +(-174)其实就是 174 + 826 = 1000 ,而后舍弃掉前面的1,结果就是0了,因此补码就是加起来会向高位进一位的数。

下面,咱们来看看补码的定义:

「补码」(英语:2's complement)是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。补码以有符号比特的二进制数定义。

正数和0的补码就是该数字自己。负数的补码则是将其对应正数按位取反再加1。

补码系统的最大优势是能够在加法或减法处理中,不需由于数字的正负而使用不一样的计算方式。只要一种加法电路就能够处理各类有号数加法,并且减法能够用一个数加上另外一个数的补码来表示,所以只要有加法电路及补码电路便可完成各类有号数加法及减法,在电路设计上至关方便。

另外,补码系统的0就只有一个表示方式,这和反码系统不一样(在反码系统中,0有二种表示方式),所以在判断数字是否为0时,只要比较一次便可。

二进制减法

好了,咱们知道了补码的概念以后,再来看看二进制数的减法。

大数减少数

251-174 转换成二进制就是 11111011 - 10101110 ,还记得咱们上面不用借位的公式吗?

251 + (999 - 174)+ 1 - 1000 = 77 ,其中 「(999 - 174)+ 1」就是-174的补码,对应二进制10101110的补码就是先取反01010001,而后再加1,01010001 + 1 = 01010010

而后11111011 和补码 01010010 相加,最高位超过8位,溢出了,直接去掉不要,就是最终结果01001101,即为十进制的77。

这样经过补码,就能把减法用加法实现了。

小数减大数

若是是174-251用二进制计算该怎么办呢?10101110 - 11111011 ,一样的咱们先计算11111011的补码:

而后10101110再和补码00000101相加:

10110011的十进制是179,结果也不对啊,别急,由于174比251小,相减的结果确定是负数,计算机的负数是用补码表示的,因此10110011确定是表示一个补码,「一个数补码的补码就是他本身」,至关于负负得正,咱们再计算10110011的补码:

获得01001101,十进制是77,一个数的补码是77那么这个数确定就是-77啦,因此10110011表示的是-77的补码,而不是179。

最后的话

最重要的是,咱们要知道补码的概念,以及补码的转换规则“「正数的取反再加1」”。

计算机巧妙的用补码来表示负数,而后经过和一个负数(补码)相加,来实现减法的操做。

例如:把减法251-174 变成 251 + (-174)的加法操做,这种把减法变成加法的操做,是否是很神奇呢?

怎么用计算机计算减法,计算机只会加法,那么它如何用加法来计算减法呢?相关推荐

  1. 计算机只会加法,那么它如何用加法来计算减法呢?

    计算机中的加减乘除都是通过加法实现的,那么你肯定很好奇,加法和减法是完全不同的操作啊,如何用加法来进行减法运算呢?下面我就通过几个例子,来解释一下具体的操作过程. 二进制加法 开始之前,我们先复习一下 ...

  2. 使用计算机打印资料时需要安装打印机驱动,详细教您如何在计算机上安装打印机驱动程序...

    众所周知,使用打印机打印文件时,通常将其连接到计算机,并且计算机必须安装有相应的打印机驱动程序才能进行打印. 尽管不同的打印机驱动程序安装方法不同,但是它们都是相同的. 的. 以下编辑器将与您分享如何 ...

  3. 计算机短路计算基本原理,短路计算的计算机方法ppt课件

    ,电力系统故障的计算机算法,第一节概述,第二节电力系统故障计算的等效网络,第三节对称短路计算,第四节简单不对称故障计算,.,2,第一节概述,用计算机进行故障分析时,主要有以下两条基本假设:系统各元件的 ...

  4. 计算机之发展简史、体系与结构、层次与编程语言、计算单位、编码等简介

    目录 一.计算机发展简史 1.计算机的四个发展阶段 2.微型计算机的发展历史 3.计算机的体系与结构 4.计算机的层次与编程语言 ​编辑 硬件逻辑层 微程序机器层 传统机器层 操作系统层 汇编语言层 ...

  5. 计算机一级证电子表格函数值怎么算,2017年计算机一级WPS辅导:WPS文字的表格中进行函数公式计算...

    如果我说是在WPS文字文档中的表格能进行函数.公式等计算,不仅要显示在WPS文字中,而且完全不用初少的表格计算插件,还要实现像ET中一样多的公式和函数功能.我是在痴人说梦吗?不,其实WPS Offic ...

  6. 用计算机程序计算兴利库容,兴利调节计算的计算机自动化实现.pdf

    兴利调节计算的计算机自动化实现.pdf 第3期 水 利 信 息 化 NO.3 2010年8月 舫 ferResourcesInformatization Aug.,2010 兴利调节计算的计算机 自动 ...

  7. 科学计算是电子管计算机应用领域吗,计算机应用领域精要.ppt

    计算机应用领域精要.ppt 入门篇 计算机的发展 计算机的发展 计算机的发展 计算机的发展 电子管.晶体管.集成电路. 大规模集成电路和超大规模集成电路 计算机应用 科学计算(数值计算) 在科学研究和 ...

  8. 怎么做蒙特卡洛计算npv_计算机一级:这该死的“进制转换”,这种题到底怎么做?...

    不管是计算机一级,还是计算机二级, 选择题里都会涉及到" 进制转换 "的相关计算 分值大概在2-3分! 考试中题目大多数这样的: 我.............这真的太难了! 当然, ...

  9. 按照C++语言程序结构组成数字电路进行计算的计算机

    按照C++语言程序结构组成数字电路进行计算的计算机 按照C++语言程序结构组成数字电路进行计算的计算机是一种可以按照C++语言程序结构来安排加法器,输出显示电路,输入电路,的数字计算机.它由按键,液晶 ...

最新文章

  1. python论坛app_理解python web开发,轻松搭建web app!
  2. ASP.NET MVC的ContentResult
  3. javascript学习系列(13):数组中的concat方法
  4. 元素(HYSBZ-2460)
  5. 12-贝叶斯算法(知识准备)
  6. LOJ#6284. 数列分块入门 8
  7. 学会c对java帮助大_20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标...
  8. java 空文件夹删除_java创建文件文件夹,删除空文件夹,删除文件夹以及所有文件...
  9. 一键生成所有尺寸App Icon
  10. 微信H5页面前端开发,大多数人都会遇到的几个兼容性坑
  11. vue如何在地址栏拼接url参数
  12. 【二十一】 H.266/VVC | 仿射运动估计AMVP候选列表的构建 | fillAffineMvpCand函数
  13. Docker Cgroup资源配置(CPU、内存、磁盘)
  14. 网站注册邮件发送功能实现
  15. 什么软件运用计算机处理图像,平面设计中计算机图形图像处理软件的运用探究...
  16. 软件分享 目前最友好的开源远程桌面软件,完美替代 TeamViewer 和 AnyDesk
  17. 上海宽泛计算机招聘,2022上海市公务员考试职位表
  18. ALIENTEK TFTLCD显示大字例程(ASCII 38*38,,46*46, 60*60).包含取模软件,字库,函数
  19. 很好看的后台管理界面
  20. 技术派-在工作线程与UI线程中创建对话框

热门文章

  1. 软件测试提测是怎样提的,软件测试质量保障之开发提测
  2. webstorm修改背景图片方式
  3. Android 5.0学习之动画
  4. matlab中的取余函数
  5. 微信小程序自定义组件传参
  6. mysql错误18456_SQL Server 2012 sa用户登录错误18456的解决方法
  7. 面试官:JavaScript如何实现上拉加载,下拉刷新?
  8. 欧盟运营商:网络中立性规则危及5G投资
  9. CCF认证考试——线性分类器
  10. ADAMS中相关Part/Material等重命名(Rename)