当前位置: 首页 > news >正文

对于补码的个人理解

1. 十进制的取模计算

在这里插入图片描述
现在我想要使另一个数加上2后用8取模后也等于1,这个数可以是哪些?
这个问题比较简单,只需要-1加上8的倍数即可
例如:
在这里插入图片描述
如果我们想要得到距离-1这个负数最近的一个正数7,直接使用-1+8即可。反过来想,其实可以理解成8减去-1的绝对值,如下图:
在这里插入图片描述
为什么要得到7这个数呢?而不是15,23等等这些-1加上8的倍数的数呢?这里透露一点,一正一负,刚好互补,具体原因后面会说明。在此我们可以把7看作-1的补码(补码只是一个名字而已)。

2.类比十进制取模计算到二进制

为了与前面的例子一致,假设现在我所使用的二进制的位数为3,并且是有符号数,所有的数如下:
在这里插入图片描述
接下来进行类比十进制的计算到二进制中:
在这里插入图片描述
此处这里的计算就奇怪了,为什么二进制这样计算得到的结果与十进制得到的结果不一样呢?具体原因在第3小节会解释。

此时我们先来类比第一小节中加上模长后的计算:
计算距离-1最近的一个正数:
在这里插入图片描述
此处的1000是为了类比8这个数,虽然在3位的有符号数中不能表示1000,但是我们可以假设这个数是存在的。

在这里插入图片描述
从这个地方可以看出,我们得到的二进制计算结果和十进制计算结果相同。

3.二进制中令人迷惑的一点

相信此时会有这样的问题出现:
为什么之前二进制和十进制直接计算到结果不同,但是对二进制和十进制求补码后的计算结果就相同了?
在这里插入图片描述
在我个人的理解中,我认为问题的关键之处在于对二进制的有符号数的正负号规定上,如果我们在有符号dd二进制数中,不使用0表示正数,1表示为负数,而是使用+表示正数,-号表示负数这样的计算会不会使结果变得正常呢?
类似这样:
在这里插入图片描述
接下来进行计算:
在这里插入图片描述
从这样的结果来看,十进制和二进制的结果是相同的。同时也证明了,二进制的有符号数计算之所以与十进制与十进制计算到结果不同的原因就在于这里的正负号。

那再具体一点的解释呢?因为我们知道,在计算机中只有01这样的两个数,无法像现实中直接使用+和-表示正负号。而如果直接使用1和0表示符号的话,在计算时,它们也会参与计算,其中0并不会影响计算,但是1会影响计算。因此在计算时,负数都会先转换成补码,然后再进行计算。

那为什么补码计算的结果就正确呢?这里留个伏笔,大佬也可以在评论区解释一下。


以上内容仅个人理解,如果有哪些说得不对的地方,在此提前感谢大佬请指正。

相关文章:

  • Python考前综合练习-第六章[python123题库]
  • 人工智能和机器学习的应用日益广泛,在医疗健康领域的具体应用是什么?
  • 机器学习_SVM支持向量机
  • 【Android面试八股文】你能说一说线程池管理线程的原理吗?
  • 【因果推断python】44_评估因果模型2
  • word添加页码后,每一页的页码都一样怎么办??
  • 二次规划(Lagrange 方法,起作用集方法)
  • ROS 激光雷达
  • LeetCode 平衡二叉搜索树
  • linux配置Vnc Server给Windows连接
  • 关于docker无法正常下载镜像的问题
  • Python学习笔记14:进阶篇(三)。类的终结篇,类的导入和模块的导入。
  • Python学习打卡:day10
  • 【python】PyCharm如何设置字体大小和背景
  • 类注释规范
  • python3.6+scrapy+mysql 爬虫实战
  • Leetcode 27 Remove Element
  • PHP的Ev教程三(Periodic watcher)
  • PV统计优化设计
  • python3 使用 asyncio 代替线程
  • React-生命周期杂记
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Sublime text 3 3103 注册码
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue总结
  • Xmanager 远程桌面 CentOS 7
  • 网络应用优化——时延与带宽
  • 微信小程序设置上一页数据
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 硬币翻转问题,区间操作
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #vue3 实现前端下载excel文件模板功能
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十三)Flask之特殊装饰器详解
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)fock函数详解
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .describe() python_Python-Win32com-Excel
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .Net Web项目创建比较不错的参考文章
  • .NET 表达式计算:Expression Evaluator
  • .NET技术成长路线架构图
  • .NET下的多线程编程—1-线程机制概述
  • @ConditionalOnProperty注解使用说明
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——