回顾计算机中的原码、反码和补码

最近在看文章时,看到一篇文章介绍了计算机中的原码、反码、补码的知识,觉得写的很好,以前在学习的时候其实没有学明白。在工作了几年之后,再回头看这些知识,突然觉得很好懂了,作文以记之。

1. 原码

2. 反码

3. 补码

4. 总结

原码

原码是指一个二进制数左边加上符号位后所得到的码,且当二进制数大于0时,符号位为0;二进制数小于0时,符号位为1;二进制数等于0时,符号位可以为0或1(+0/-0)。
举个例子,2用原码表示为10。为了表述方便,在此用4位来表示数字。那么2用原码表示为0010。3用原码表示为0011。-2用原码表示为1010,-3用原码表示为1011
原码方便计算机用来存储和输入数字。但是用来计算却会出现很多问题。比如 3+3 =6 ,用原码计算的过程是0011+0011=0110,换算为十进制就是6。但是3+(-3)=0,用原码计算的过程是0011+1011=1110 得到的结果是-6,却不是0。因此用原码计算如果涉及到负数的情况下,会出现计算结果不正确的情况。因此,出现了反码来解决这个问题。

反码

首先看一下反码的定义:正数的反码与原码是相同的。但是负数的反码不同,符号位保持不变,其余位取反。即如果为0则变为1,如果是1则变为0。举个例子。2用原码表示为0010反码依然还是0010。-2用原码表示为1010,用反码表示则为1101。那么在这种情况下,2+(-2)的结果是多少呢?且看运算:首先是原码的计算:0010+1010=1100。结果是-4。用反码计算:0010+1101=1111。此时的结果依然是反码。再换算为原码为1000,即-0。那么此时会有一个问题,10000000表示的值为-0+0。但平时表达的过程中,0其实是不分正负的。因此为了解决这个问题,有大神就提出了补码的概念。

补码

且先看补码的定义:正数的原码、反码、补码相同。但是负数不同。负数的补码是在反码的基础上+1。为了是能够解决-0+0的问题。明确了补码的定义之后,且看例子佐证。
还以反码中2+(-2)=0的例子来看,-2的反码为1101,按照补码的定义+1则变为1101+0001=1110,2的补码与原码相同,依然是0010。那么补码运算则是1110+0010=10000,去掉最高位,得到结果就是0。
再看一个例子,(-2)+(-2)=-4。按照补码的方式来计算:1110+1110=11100,去掉最高位,结果为1100。且看-4的原码为1100,-4的反码为1011,-4的补码为1100。最后的结果即为-4,解决了计算机中出现+0和-0的情况。

总结

计算机内部实际上是通过加法、减法的方式来计算乘除法的。因为乘法和除法其本质就是累加和累减,懂得了原码、反码、补码的知识,便能对计算机底层的运算原理更加清晰。

猜你喜欢

转载自blog.csdn.net/u013243938/article/details/107772127
今日推荐