反码补码原码移码
计算机中,二进制数值是非常重要的一种数值。与“十进制”的表示方法不同,我们将共8位的二进制数中,每一位从右到左数值分别为1、2、4、8、16、32、64、128,并从左边的第一位(最高位)开始,数值依次加倍。这样,在二进制数列中,一个2位的数能表示从0到3的数值,而一个8位的数,能够表示从0到255的整数值。
然而,计算机在使用二进制数值时,不仅需要将整数值用二进制数表示出来,还需要在对其进行运算时,使用二进制的加、减、乘、除运算。这其中就需要用到反码、补码、原码、移码等多种数值表示方法。
一、反码
反码,就是指某一数值按位取反所得到的结果。例:十进制数值为5,在二进制数列中表示为00000101,按位取反之后得到11111010。反码的作用,主要是用来解决出现负数时,计算机无法进行加减法运算所导致的问题。
通常电脑用原码来表示,此时8位原码能可表示-128 ~127的值。原码符号位为MSB,在8位二进制数中,最高位是符号位,两个0表示正数,而两个1表示负数,因此一个8位的二进制数能表示的正数范围是0~127,负数范围是-0~-127。而这里的0和-0编码完全相同,会导致无法区分。
反码就是为了解决这个问题而产生的,对于正数,反码与原码相同;对于负数,反码可以通过正数按位取反,然后再把最高位的符号位改为1来得到。例:十进制数-5,用反码表示时,把其二进制数取反(11111010),再把符号位改为1(即:10000101),就是-5的反码。
二、补码
补码,即用二进制来表示整数值时,在计算机中所采用的一种数码表达方式。它的基本原理是,将该数的反码加上1所得到的结果,就是该数的补码。
例如:十进制数-5的反码为10000101,而它的补码为10000110。在使用补码来计算减法、加法运算时,能够避免使用原码造成的加减混乱问题,也避免了使用反码时8位数值中存在两个0或-0的问题。在计算机中,补码的实际应用非常广泛,例如我们常用的CPU器件中,都会采用补码来表示整数值。
补码的优点是可直接将加法器用于有符号数的加法运算,从而简化了CPU操作。此外,用补码表示数值时,也避免了出现两个0或-0的问题。
三、原码
原码,又称为真值,就是指把一个数值的二进制代码直接转化为十进制值,所得到的数值的表示方法。以十进制数-5为例,其二进制原码为10000101,即符号位为1,数值位为5。
原码相对于反码和补码来说,最为直观,也是最容易理解的一种整数表示方法。但是,在原码自身的表示方式中,却存在较大的缺点,主要是因为在计算机加减法中,会造成正数与负数相加的问题。
四、移码
移码是在原有的基础上,将上述三种表示方式进一步扩展而来的一种数值表达方式。移码可以将原码、补码的二进制表示继续向左移若干位,以达到不同的计算目的。
移码的优点是在进行算术运算时,可以方便地把阶码的加减直接通过加减移码来实现。同时,它也更加符合实际运算的计算习惯,因此在计算机的实际应用中,移码也得到了广泛应用。
综上所述,反码、补码、原码、移码是计算机中重要的整数表示方式。它们分别解决了二进制数在计算过程中的加减混淆、负数范围和正负0的表示问题,同时还为计算机中不同的数值运算提供了方便、快捷的表达方式。