原码反码补码的作用(原码反码补码的运算)
导语:都学过原码,反码,补码 有想过他们存在的意义吗?
其实就是为了简化CPU的设计,CPU只需设计一个加法器就可以做算术四则运算。 为啥?往下看。
我们把一个数在计算机内的二进制形式称为机器数(带符号),该数值称为这个机器数的真值。
机器数通常是8位或16位(具体和与机器有关)。最高位表示符号,0表示正,1表示负。例如,假设机器数为8位,最高位是符号位,那么在定点整数的情况下,00101110和10010011的真值分别为十进制数+46和-19。
好。开始说明为什么这两个二进制数是46和-19。 首先需要了解 原码。
一个数如果正,则就是计算二进制。
一个数如果负,则将正数的最高位变成1。
注意,最高位是符号位,不能算入计算真值。46的二进制是101110。所以原码为00101110(八位填满0补位)。19的二进制是10011。则19的原码是00010011。-19符号位变1,即10010011。 OK,下面了解反码。
一个数如果是正,则它的反码与原码相同;
一个数如果是负,则符号位为1,其余各位是对原码(除符号位)取反;
所以,46的反码是00101110,-19的反码计算过程为:19的原码(除符号位),按位取反,得到01101100,然后符号位至为1,最终得到11101100。
ALL RIGHT,接下来是最重要的补码了~
一个数为正,则它的原码、反码、补码相同
一个数为负,则符号位为1,其余各位是对原码取反(即取反码),然后整个数加1。
继续举例,根据规则,46的补码还是00101110。-19的补码计算过程为:上面我们得知,-19的反码是11101100,整个数+1即得到补码——11101101。
在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。所以我们可以利用做运算用 利用溢出,我们可以将减法变成加法。
如果上面这句话不理解,那么记住2点就好。第一点。超过8位(也可能是16位),内存情况为需进位(100000000)时,进位舍去。第二点。我们可以利用第一点将减法变加法。
比如 46-19=46+(-19);使用补码进行计算,得到100011011。然后舍去超过的第9位,得到00011011。大家发现了吧,这个数是27的原码。 所以说,通过补码运算,我们可以把减法变成加法。因为乘法就是加法的累加,除法是减法的组合,那么我们就可以用加法表示其他三种运算方式。所以只在CPU中实现一个加法器就可以了。
在计算机系统中,负数一律用补码来表示(存储)。
下图是-5的计算方式。供各位练习原码,反码,补码计算参考。
下次介绍位移运算。谢谢关注。
免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小海创作整理编辑!