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

计算机基础:编码04,认识反码和补码

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:计算机基础:编码03,根据十进制数,求其原码

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:计算机基础:编码03,根据十进制数,求其原码

回到目录

下一篇:无

本节前言

在前两节,我讲解了关于原码的知识。本节,我来讲解反码和补码。

在学习本节之前,你需要确保,你已经理解了原码。如果还没有学习过原码的知识,请在本文的导航里面,在目录里面,找到前两节的文章,学习原码的知识。在你确定自己已经基本掌握了原码的知识以后,我们再往下学习。

一.     反码和补码

首先呢,我得强调一点。原码,反码,补码,它们都是用来对有符号整数进行编码的东西。无符号数,是不存在这三者的区分的。对于无符号数来说,给出一个大于或等于 0 的整数,对其进行除 2 取余法的运算,求出其对应的二进制编码,所得到的这个二进制编码,便是无符号数的编码了。

而与无符号数相比,有符号的编码则是显得复杂了一些,还分成了原码,反码和补码三种编码方案。

关于原码,反码和补码,有这么几个要点。

要点 1:0 和 正整数的反码与补码,等于其原码。

要点 2:给定一个负整数的原码,想要求解其反码,我们需要做这样的事情。首先呢,保持符号位也就是最高位不变,令符号位固定为 1 ,而将其余位按位取反。

要点 3:给定一个负整数的反码,想要求解其补码,我们需要做这样的事情。首先呢,保持符号位不变,令符号位固定为 1 。然后呢,让其余位加 1 。

要点 4:给定一个负整数的原码,想要求解其补码,我们需要做这样的事情。第一步是保持符号位不变,令符号位固定为 1 。第二步,对其余位按位取反,然后加 1 。

对于要点 4,我们发现,它与要点 3 的解题步骤关系密切。其实,要点 4 的解题思路,就是先求解出一个负整数的原码的反码,然后令符号不变且其余位加 1 。

要点 5:已知一个数的补码,想要求解其原码,我们需要做这样的事情。第一步是保持符号位不变,令符号位固定为 1 。第二步,对其余位按位取反,然后加 1 。

我们发现,在要点 5 里面,已知负整数的补码而求原码的问题,与已知负整数的原码而求补码的解题步骤是一致的。实际上,已知一个负整数的补码,然后想要求解它的原码,其实解题思路就是求补码的补码。

二.    举例

在第一分节中,我讲解了关于反码和补码的五个要点。我只是进行了笼统的说明,而并未举例子。有可能,大家还不明白。所以呢,我举点例子来说明。

(一)要点 1 举例

例 1:已知十进制数 34 的 8 位原码为 0010 0010,则它的 8 位反码和补码均为 0010 0010 。

例 2:已知十进制数 91 的 16 位原码为 0000 0000 0101 1011,则它的反码和补码均为 0000 0000 0101 1011 。

例 3:十进制数 0 的 8 位原码为 0000 0000,它的 8 位反码和补码也是 0000 0000 。

例 4:十进制数 0 的 16 位原码为 0000 0000 0000 0000,它的 16 位反码和补码也是 0000 0000 0000 0000 。

(二)要点 2,3,4 举例

例 1:已知十进制数 -29 的 8 位原码为 1001 1101,则它的 8 位反码为 1110 0010,补码为 1110 0011 。

例 2:已知十进制数 -73 的 16 为原码为 1000 0000 0100 1001,则它的 16 位反码为 1111 1111 1011 0110,补码为 1111 1111 1011 0111 。

例 3:已知十进制数 -128 的 8 位原码为 1000 0000,则它的 8 位反码为 1111 1111,补码为 1000 0000 。

例 4:已知十进制数 -32768 的 16 位原码为 1000 0000 0000 0000,则它的 16 位反码为 1111 1111 1111 1111,补码为 1000 0000 0000 0000 。

例 5 :已知十进制数 -631 的 16 位原码为 1000 0010 0111 0111,则它的 16 位反码为 1111 1101 1000 1000,补码为 1111 1101 1000 1001 。

(三)要点 5 举例

例 1:已知十进制数 -719 的 16 位补码为 1111 1101 0011 0001 。

想要求解其原码,我们需要两步。

第 1 步,保持符号位 1 不变,其余位 按位取反,结果为 1000 0010 1100 1110 。

第 2 步,将第 1 步的运算结果,保持符号位 1 不变,其余位加 1,结果为 1000 0010 1100 1111 。

例 2:已知十进制数 -94 的 8位补码为 1010 0010,求解其原码。

第 1 步,保持符号位 1 不变,其余位 按位取反,结果为 1101 1101 。

第 2 步,将第 1 步的运算结果,保持符号位 1 不变,其余位加 1,结果为 1101 1110 。

三.    求解一个十进制负整数的原码,反码和补码

前面的第一和第二分节,我是直接给出了原码或者反码,补码。假如,没有给出任何一个编码,直接给出来一个十进制整数,让我们求解它的原码,反码和补码,我们要如何来做呢?

首先呢,我们需要解出这个十进制整数的原码。已知十进制整数,求解其原码的方法,可以参考下述链接所示的文章。

计算机基础:编码03,根据十进制数,求其原码-CSDN博客

求出了原码以后,我们再按照第一分节的讲解,解出这个 十进制整数的反码和补码。

在这里,关键的步骤,就是解出原码。

这一分节所述的知识,我不想举例子了,我相信大家是能够理解的。如果还不理解,那就单独联系我吧。

结束语

原码,反码和补码的知识,我认为,它是不难的。然而,在讲解的时候,还是需要花费一点心思。

也许,真正不好讲的,还是在于正式的 Win32 与 MFC 的知识了。

我们都来努力吧。

本节结束。

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:计算机基础:编码03,根据十进制数,求其原码

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:计算机基础:编码03,根据十进制数,求其原码

回到目录

下一篇:无

相关文章:

  • 深度学习3-pytorch学习
  • python学习笔记--实现简单的爬虫(二)
  • AutoImageProcessor代码分析
  • Python设计模式 - 适配器模式
  • 二十四、实战开发 uni-app x 项目(仿京东)- 前后端实现登录注册
  • 在线生成自定义二维码
  • 失物招领|校园失物招领系统|基于Springboot的校园失物招领系统设计与实现(源码+数据库+文档)
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的异常处理:全局异常与自定义异常
  • 【自学笔记】Linux基础知识点总览-持续更新
  • 利用Dify编制用户问题意图识别和规范化回复
  • C#单例模式
  • 常考计算机操作系统面试习题(二)(中)
  • Windows——电脑无法正常上网的一种解决办法
  • 统计学重要概念:自由度
  • 《Python实战进阶》第43集:使用 asyncio 实现异步编程
  • Amdahl 定律
  • react 中 key 的使用
  • 抗积分饱和(Anti-Windup)常见的处理方法
  • SpringBoot原理篇-SpringBoot配置优先级-Bean管理-起步依赖原理-自动配置两种方案-源码跟踪-自定义starter
  • 不同的CMS系统开源许可证对二次开发有哪些具体的限制?
  • “网约摩托”在部分县城上线:起步价五六元,专家建议纳入监管
  • 国台办:民进党当局所谓“对等尊严”,就是企图改变两岸同属一中
  • 奔驰一季度利润降四成,受美国加征关税影响放弃全年盈利展望
  • 张炜琳已任三明市委常委、宣传部部长
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长