关于原码、反码、补码的一些理解
2017-07-19 09:13
375 查看
计算机中定义:
正数的原码、反码、补码均一致;
负数的反码是原码除符号位外,各位取反,补码是反码加1;
-128~127用8位二进制表示就是1000000~01111111;
实数在底层是按照补码的形式存储的。
通常的求各种码,就是以上的计算方法。
现在要讨论的是,补码的意义?也就是说为什么要有补码这么个计算复杂得出的数来存在计算机底层。
在计算机硬件设备中,基础原件中不存在减法器,只有加法器,这代表在计算机中加法是可以通过硬件进行计算的,而减法不能。科学家在这里,利用到了“模数”(这和百度里搜到的词条解释不同,是我自己造的词便于理解,也可以理解为周期数)。
举个例子:
在一个闹钟上,只有1~12个数字,当我求2点+3点的时候,计算机中会用加法器直接算出5点这个值供使用;
如果我当我求10点-4点,计算机会如何计算呢?计算机底层存储的都是补码,所以会计算10点的补码+(-4点的补码)。【这里的补码只是12个数字例子中的补码,不是计算机中的补码。】
这里求补码和计算的过程可以类似以下:
我们知道当时针转过12点的时候又会回到1点然后继续转到12点,那么10点-4点可以转换为10点+8点,这个8点在计算机中如何求呢,我们知道,就是12点-4点,当然,计算机中没有减法器。
所以在这个环境下,其实这个12点-4点在计算机底层就是8的补码,那么在求10点-4点时,由于在计算机底层使用补码存储的,那就会用10点的补码+(-4点的补码)也就是10点+(12点-4点)=18点-一个模数(或者说-一个循环或者一个轮回)=6点。
通过以上例子,在真实情况下的计算机中,补码其实可以理解为补上一个数到上一个轮回。
所以负数的原码+补码一定等于-128【8位二进制】
正数的原码-补码一定等于0【8位二进制】(不是因为正数的原码=补码,是因为在一个循环节中)
正数的原码、反码、补码均一致;
负数的反码是原码除符号位外,各位取反,补码是反码加1;
-128~127用8位二进制表示就是1000000~01111111;
实数在底层是按照补码的形式存储的。
通常的求各种码,就是以上的计算方法。
现在要讨论的是,补码的意义?也就是说为什么要有补码这么个计算复杂得出的数来存在计算机底层。
在计算机硬件设备中,基础原件中不存在减法器,只有加法器,这代表在计算机中加法是可以通过硬件进行计算的,而减法不能。科学家在这里,利用到了“模数”(这和百度里搜到的词条解释不同,是我自己造的词便于理解,也可以理解为周期数)。
举个例子:
在一个闹钟上,只有1~12个数字,当我求2点+3点的时候,计算机中会用加法器直接算出5点这个值供使用;
如果我当我求10点-4点,计算机会如何计算呢?计算机底层存储的都是补码,所以会计算10点的补码+(-4点的补码)。【这里的补码只是12个数字例子中的补码,不是计算机中的补码。】
这里求补码和计算的过程可以类似以下:
我们知道当时针转过12点的时候又会回到1点然后继续转到12点,那么10点-4点可以转换为10点+8点,这个8点在计算机中如何求呢,我们知道,就是12点-4点,当然,计算机中没有减法器。
所以在这个环境下,其实这个12点-4点在计算机底层就是8的补码,那么在求10点-4点时,由于在计算机底层使用补码存储的,那就会用10点的补码+(-4点的补码)也就是10点+(12点-4点)=18点-一个模数(或者说-一个循环或者一个轮回)=6点。
通过以上例子,在真实情况下的计算机中,补码其实可以理解为补上一个数到上一个轮回。
所以负数的原码+补码一定等于-128【8位二进制】
正数的原码-补码一定等于0【8位二进制】(不是因为正数的原码=补码,是因为在一个循环节中)
相关文章推荐
- 关于反码、补码、原码的一些应用于理解
- 关于二进制的原码,反码和补码的问题初步理解
- 关于原码,反码,补码和左右移位的若干思考
- 关于原码,反码,补码和左右移位的若干思考
- 原码反码补码移码的理解及C语言验证
- 计算机码制--深入理解 原码、反码、补码
- 关于原码、反码与补码
- 关于计算机中数字存储方式-原码、反码、补码
- 关于原码、反码和补码的故事
- 原码,反码,补码,个人理解
- 原码,反码,补码的研究和理解。 2014-08-05 16:42 71人阅读 评论(0) 收藏
- 关于汇编中的NEG指令正解!(补码,反码,原码)现实意义
- 关于原码,反码,补码的一点注记
- Java 中关于原码,反码,补码的问题及常用的逻辑运算
- 原码,反码,补码的研究和理解。
- 关于原码、反码和补码,想一想为什么
- 关于原码、反码、补码详解
- 理解原码、反码和补码-------带例子详解
- 关于原码,反码,补码和左右移位的若干思考
- 个人对原码-反码-补码的理解