用一个例子来解释补码的原理:

假设现在标准时间为4点整,而有一只表已经到7点了,为了校准时间,可以采用两种方法:一种是将时针退7-4=3格;二是将时针向前拨12-3=9格,这两种方法都可以校准到4点。

摘自《计算机组成原理》p20 第2节

这个例子的意思可以理解为将7变为4,在钟表环境(12进制)下可以表示为7-3和7+9

意即钟表法则中

7-3=7+9 (称为同余式)

看了这个例子,你大概已经知道能这样做的原因是什么了

根本在于

钟表法则中超过12的数会溢出,重新从0开始计算

准确的说这里的12应该被称为模长,也是补码得以有效的关键,在表示的数值大小被限制时,有了溢出就能将减法变成加法了

有了这个条件,现在可以总结出一套推论

模长为m时,x-y=x+m-y

你可能会觉得这有什么用?还是得用模长做减法才能得出这个等效加数呀

这就是二进制得天独厚的优势了

m-y可以转变为m-1-y+1

这不是废话吗

别急,在二进制中计算机能表示的数的大小总是以位计算的,也就是说,假如总共有8位,那么模长就是2^8,能表示的是0~2^8-1之间的数。

这时候m-1表示的就是1111 1111,上面的m-1-y+1就是1111 1111 - y +1

而1111 1111-y等效于~y(对y求反),求一个数的反码在计算机中是很容易实现的,通过触发器互补输出得到

这时x-y=x+~y+1      补码由此实现将减法变为加法

总结

补码的意义建立在二进制和数值位数确定的情况

补码通过溢出实现将减法转变为加法

二进制补码是如何把减法转变为加法的相关推荐

  1. 补码是如何把减法转化为加法的?

    我们都知道在计算机中,数字是以补码的形式存储的,好处就是利于减法计算,可是为什么呢?让我们来试图回答以下几个问题. 什么是补码,如何计算? 补码如何将减法转化为加法? 但凡编程入过门,都知道补码是怎么 ...

  2. 二进制补码以及为什么要使用补码

    计算机系统的内部以二进制形式存储数据. 在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是十进制. 补码规则 在计算机系统中,数值一律用二进 ...

  3. 八位计算机最小二进制,八位二进制补码最小值

    好吧,小编虽然上个C++语言和VB语言基础,虽然那个爱笑的从国外留学回来的老师讲课很好很精彩,但无奈小编跟不上呀.所以下面是学习啦小编给大家总结的八位二进制补码最小值和二进制补码知识点. 八位二进制补 ...

  4. 16位二进制补码 c语言,2,16进制原码补码反码问题

    1. 在计算机里,通常用数字后面紧跟一个英文字母来表示该数的数字, 十进制一般用D,二进制用B,八进制用O,十六进用H来表示, 2. 首先,十进制数转换成二进制,除2取余,按箭头方向写,自上而下写出来 ...

  5. 山东大学计算机组成与设计实验六 二进制补码加法器实验

    山东大学计算机组成与设计实验六 二进制补码加法器实验, 山东大学计算机组成与设计实验, 山东大学计算机组成与设计实验报告, 计算机组成原理实验报告, 山东大学计算机组成原理实验报告 文章目录 实验6 ...

  6. 二进制补码计算原理详解

    二进制的负数在计算机中采用补码的方式表示.很多人很好奇为什么使用补码,直接使用原码表示多好,看上去更加直观和易于计算.然而事实告诉我们,这种直观只是我们人类的一厢情愿罢了,在计算机看来,补码才是它们最 ...

  7. 进制转换小技巧之让你重新认识二进制补码(大师,我悟了)!!!

    前言 我们都知道计算机内部是使用二进制来进行运算的,那么你对于二进制转换为其它进制或者其它进制数转换为二进制数是否熟练于心呢? 与我们现实中的十进制不同,计算机内部使用二进制表示(一般我们书写用十六进 ...

  8. 二进制补码记数法和余码记数法

    目前,计算机表示整数普遍采用的就是二进制补码记数法.它是用固定数目的二进制位来表示整数,通常是32位.如1表示成 00000000 00000000 00000000 00000001 但这里,为了方 ...

  9. 计算机中的加减法(二进制补码加减法)

    原码的加减法 加法一共有四种可能: 正数 + 正数:取绝对值相加即可,结果是正数 负数 + 负数:取绝对值相加,结果是负数 正数 + 负数:绝对值大的数减去绝对值小的数,符号谁大取谁的符号 负数 + ...

最新文章

  1. 规模-复杂世界的简单法则---熵
  2. Windows 技术篇-cmd强制关闭端口、解除端口占用方法,cmd查询端口相关的进程pid并杀死进程实例演示
  3. Git常用命令速查表
  4. 【机器学习】主元分析(PCA)以及与SVD的区别联系
  5. thinkphp5记录
  6. 漂亮的html页面源码_爬虫数据分析之html
  7. Change Value to Reference(将值对象改为引用对象)
  8. 基于双麦克风声源定位的视频跟踪
  9. ios手机怎么连接adb命令_没有 mac 的福音,windows 下对 ios 进行操作 (类似 android 的 adb 操作)...
  10. NYOJ260 - 数数小木块
  11. 个人微信小程序开发入门教程:注册个人小程序
  12. 性价比哪家强?富勒G93S光磁微动鼠标深度评测
  13. 高盐废水如何处理,离子交换树脂在高盐废水中的应用
  14. 亲爱的,你是吃屎了么
  15. Android项目中接入网易云信聊天
  16. SAP中重订货点Reorder Point原理分析及测试
  17. mindmanager 2021许可密钥全新可视工作管理和思维导图软件
  18. #1790 : 特工配对
  19. 解决UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 212: illegal multibyte sequence
  20. 电脑上被误删的文档怎么恢复?4个实用妙招解决

热门文章

  1. 修复Android手机屏幕的5种简单方法是黑色的
  2. 如何将Asp.net 2.0网站部署到服务器
  3. 用python 写hadoop 需要怎么配置环境 python开发hadoop教程
  4. 用计算机给手机充电,用电脑USB口长期给手机充电有危险吗?
  5. PDF删除水印与添加水印方法介绍
  6. 如何将PDF删除水印?PDF删除水印的方法
  7. Matlab中的c2d函数用法以及绘制传函的Bode图
  8. 查询数据库空间(mysql和oracle)
  9. win10关闭任务栏窗口预览
  10. java byte 图片_Java将byte[]转图片存储到本地的案例