小编导读

“在计算机系统中,数值一律用补码来表示。” 教科书上虽然这么说,但是却没有告诉我们为什么,今天小编就带大家一探究竟!

计算机数值运算的基础硬件就是加法器,所以我们就从加法器讲起。

1. 加法器

加法器是计算机数值计算的最基础硬件单元,加减乘除都是以加法器为基础实现的。加法器的构成如下图所示,其中S是和数,C是进位。

  • 半加器

半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。

  • 全加器

全加器是能够计算低位进位的二进制加法电路。与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,可以把多个一位全加器级联后做成多位全加器。

乘法运算依赖于加法运算,除法运算依赖于减法运算(乘除法的计算原理请自行百度)。

加法器解决了加法运算,那么减法运算该怎么办呢?

设计一个减法器?NO!设计一个减法器并不划算(原因请自行百度),正确的答案是采用“补码”。

2. 补码

减去一个数相当于加上这个数的负数,这样减法就转换成了加法。

比如:

0x33 - 0x11 ====> 0x33 + (-0x11) // 那么在计算机中怎么表示-0x11呢?

所以解决减法问题,其实就是解决负数的表示问题,而众所周知,绝对值相等的两个正负数之和为0。

假设我们有正数 0000000000001111,我们如何表示其相反数呢?

一般我们的思路是,找一个数,跟它相加的结果等于0,但是我们发现,要找出一个与它相加后结果等于0的数还是要略加思考一下的,因为要计算进位。

所以,为何不找出一个与它相加后结果是 1111 1111 1111 1111的数[1],然后该数+1(+1溢出,所以相加的和就是0)即是我们所要的答案[2]。

于是,很容易得出:

0000 0000 0000 1111

+ 1111 1111 1111 0000 // 先找出相加为1111 1111 1111 1111的数,既是反码

+ 1 // 然后再加1,既是补码

= 1111 1111 1111 1111 + 1 = (1)0000 0000 0000 0000

一目了然,补码 1111111111110001 就是我们想要的答案。

3. 总结

  • 补码是用来解决负数在计算机中的表示问题的

  • 解决负数在计算机中的表示问题,是为了解决减法运算问题

  • 加法器解决了加法和乘法运算问题,补码解决了减法和除法运算问题

  • 求一个数的反码:找到与这个数相加结果为 1111111111111111的数

  • 求一个数的补码:找到其反码然后加1

[1]: 这个应该就是反码的来历

[2]: 这个应该就是补码的来历

补码乘法实验原理_你真的理解补码吗?相关推荐

  1. 二进制补码乘法除法_二进制乘法和除法

    二进制补码乘法除法 1)二进制乘法 (1) Binary Multiplication) Binary numbers can be multiplied using two methods, 二进制 ...

  2. 简单人物画像_你真的理解用户画像吗?| 船说

    " 「设计师沙龙」是ARK下半年开始逐渐形成的传统,由ARKers自发组织,分为视觉和交互两类,每月各举办一次.大家围绕一个话题展开,聊聊行业最新案例和工作上的心得,帮助大家共同进步. AR ...

  3. 狄立克雷函数傅立叶变换0点_你真的理解傅立叶变换吗?

    距离上一次发稿已经过去了快三个月,创作欲有些旺盛,虽然最近很忙,但还是想写点东西,因为近来重新仔细研读了奥本海姆的那本圣经级别的绿皮书<信号与系统>,深有感触,我在之前学习中的更多困惑也得 ...

  4. python小数乘法计算_多种思维理解小数的乘法运算

    图片发自简书App 今天在四年级学习小数乘法计算时,学生提出了运用多种方法去参与计算,帮助他们建构和理解,拓展思维.孩子们在课堂上积极思考,大胆说出自己的想法,在课堂上和学生们互动不错,故作文以记之. ...

  5. mysql 二级索引原理_你真的理解索引吗?从数据结构层面解析mysql索引原理

    索引数据结构 数据页基本结构 : 从上图可以推断出,查询某条记录关键步骤只有2个:定位到数据页 定位到记录 如果没有索引,查询某条记录只能先依次遍历数据页,确定记录所在的数据页之后:再从数据页中通过 ...

  6. linux buffer cache 过高_你真的理解Linux的内存监控吗?

    如果你平时工作使用Windows系统,对Windows的内存监控应该不陌生,在"任务管理器"中显示90%的内存占用,这些内存就全部由进程占用了,如果这时产生了新的进程,没有内存可用 ...

  7. 一位原码的乘法规则_原码一位乘法与补码一位乘法

    原码1位乘法 在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号按异或运算得到.而乘积的数值部分则是两个正数相乘之积.设n位被乘数和乘数用定点小数表示(定点整数也相同适用) 被 ...

  8. verilog设计一个补码加减法运算器_漫画:为什么计算机用补码存储数据?

    作者 | 漫话编程来源 | 漫话编程(ID:mhcoding)我们知道,计算机只认识0和1,现实世界中的内容,无论是文字.音频.视频等等想要通过计算机存储.计算或者展示,都需要转换二进制.就像你刚刚唱 ...

  9. (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 题目 分析过 ...

最新文章

  1. LeetCode简单题之相交链表
  2. Android之——短信的备份与还原
  3. opencv实现人脸检测、性别和年龄预测
  4. java awt table_java.awt.image 类 LookupTable - Java 中文参考手册
  5. rowid会变化么_升级后的饿了么,将成为阿里引领数字化的先锋
  6. python3.6.3安装过程_python3.6.3安装图文教程 TensorFlow安装配置方法
  7. HTTP访问一个网站的过程详解
  8. windows 取色器_这款 Windows 10 官方「外挂」让你取色更便捷
  9. 二:Maven中pom.xml元素详解
  10. SpringBoot操作MongoDB实现增删改查
  11. 数学课本上的几大变态之处
  12. java中的Servlet
  13. linux postgre服务名,linux中service配置之postgresql
  14. MFC初探 —— 双击Picture Control具体位置放大图片
  15. 《前端技巧》文件下载功能在苹果手机中的特殊处理
  16. 如何更改ElementUI组件的图标大小以及标签属性
  17. 爬虫基础 || 2.1 request介绍(功能比urllib丰富,附上简单的知乎爬虫)
  18. eclipse java swt_Eclipse swt开发环境搭建
  19. 数学建模——核军备竞赛
  20. 服务器主板u3芯片配i3CP0,【铭瑄B75评测】寝室限网怎么办? 主板化身无线路由器-中关村在线...

热门文章

  1. Android商城开发系列(十)—— 首页活动广告布局实现
  2. [绝对原创]一些你们想不到的简单方法,就可以让你手机飞快起来!!!
  3. 没有用户的可用性测试
  4. button按钮绑定回车事件
  5. redis用list做消息队列
  6. 基于上下文的访问控制与基于区域策略的防火墙
  7. 一款可以安利的MarkDown编辑器
  8. sql server内置存储过程、查看系统信息
  9. 由pthread_create引起的段错误
  10. jQuery 自定义选择器