计算机基础:编码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,根据十进制数,求其原码
回到目录
下一篇:无