小结码制:原码、反码、补码及移码

                                                                           返回主页

math!.jpg

组成原理课上再一次复习并学习了码制,这一次从计算机内部硬件出发将码制进行了一次系统的学习,从而对于程序设计语言中数值的范围有了更深的了解,尤其是对于int型数的范围为何-2^31--2^31-1有了清晰的感受。

全在于计算机内部对于0的处理

原码和反码各有两种0的表现形式,即+0和-0;而补码和移码表示0有唯一的形式。

在数轴上表示就是在大于0时,原码、反码范围相同。在小于0时,补码和移码比原码和反码多一个数,因为补码和移码对0的表示相同,因此总体看来只有一个0,而原码和反码则因为有两种0的表示因此造成总的数值范围比前两者要少。


移码与补码的区别和联系

由于定义上的原因,

补码 == 移码 + 2^(n-1)

此处的2^(n-1)即是符号位上的1。

于是就有原码、反码、补码符号位正数为0,负数为1;而移码正数符号位为1,负数符号位为0。数学上的表现就是在移码的最高位加1,若补码为正数即符号位为0,则和为1,即为正数的移码符号位。反之,若补码为负数即符号位为1,最高位加1后由于进位,使最高位为0,此时即是负数移码表示。