大学知识回顾02——原码反码补码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wf824284257/article/details/78761865

对于计算机相关专业的学生,我相信这几个词大家一定不陌生。大学四年里,有多门课程涉及到原码反码补码的概念,但是课本上讲的往往不够透彻,只讲了做法而没讲道理,只便于计算而不便于理解。这里,笔者简单聊一下这3个码,特别是对于补码的理解。

首先,笔者先把这几个码的计算方法从课本上抄过来,我们以8位有符号数、正负53为例:
[+53]原= 0 011,0101 ,正数原码只需要转化为2进制,符号位为0即可;
[+53]反= 0 011,0101 ,正数反码等于原码;
[+53]补= 0 011,0101 ,正数补码等于原码;
[-53]原= 1 011,0101 ,负数原码只需要转化为2进制,符号位为0即可;
[-53]反= 1 100,1010 ,负数的反码,符号位不变,其他位取反(0变1,1变0);
[-53]补= 1 100,1011 ,负数的补码,等于反码+1;

好了,大多数课本上都是这么教的。有了上面的示例,原码反码补码求起来就没问题了。但是对于负数的补码的理解,课本上并没有讲太多,仅仅是让学生会算就行了。

嗯,这不符合学习的一般规律。在心存疑惑没有理解透彻的情况下,仅仅会求会算,这并不叫学会了。笔者也探究过负数补码,在这里说一下自己对补码的理解。

我们先举一个例子:有一个普通的12小时的时钟,把电池拆了,分针秒针拆了,只留下时针。现在我们将时针从12点方向开始,顺时针转3个小时的角度转到3点方向,问如果从12点方向逆时针转,至少要转几个小时的角度才能让它指向3点方向?

这个问题很简单对吧,答案是9. 也就是说,对于一个12个小时刻读的时钟来说,+3和-9所能达到的效果是类似的,因为3+9=12正好是时钟一圈;换句话说,+3和-9是互补的。

现在转到我们原始的问题上来。我们可以用类似时钟+3和-9互补的方式来理解负数的补码。让我们在来看一下[-53]的补码;

[-53]补= 1 100,1011 , 若将该二进制数看做是无符号数,那么1100,1011=2^7+2^6+2^3+2^1+2^0=128+64+8+2+1=203;

即将[-53]补的二进制值,看做无符号数时,是等于203的。

53+203=256 , 也就是2^8 ;

说到这,相信大家对负数补码有了一些新的感觉吧。

dawufan.cn

猜你喜欢

转载自blog.csdn.net/wf824284257/article/details/78761865
今日推荐