计算机中原码,反码,补码,相互转换以及作用
1、机器数和真值 学习计算机之后,都知道了数据在计算机中的存储是以二进制数进行存储的,即都是由0和1这样的二进制数进行存储的。所以一个数在计算机中的二进制表示就叫做这个这个数的机器数。其中,最高位是符号位,正数为符号位为0,负数符号位为1. 因为一个数的二进制表示,也就是该数的机器数的第一位是符号位,所以,机器数的值并不能表示该数真正的值,例如:十进制正数:+3,在计算机中用八位二进制来存储,转换成二进制就是:000 000 11;十进制负数:-3,它的机器数是:100 000 11,如果从不考虑机器数的含义,只从字面上看的话,100 000 11转换成十进制数字就是27 + 21 + 2**0 = 128+2+1=131,但是机器数100 000 11表示的值却是十进制数-3,所以将带符号位的机器数对应的真正数值称为机器数的真值,即100 000 11的真值为-3。
2、原码,反码,补码 **原码:**最高位表示符号位,其余部分表示数值本身的绝对值。 [ + 1 ] 原 [+1]_原 [+1]原 = 000 000 01 [ − 1 ] 原 [-1]_原 [−1]原 = 100 000 01 第一位表示的是符号位,所以二进制数的取值范围是[111 111 11,011 111 11],即十进制:[-127,127]
**反码:**如果是正数,反码就是其本身,如果是负数,则除符号位不变,其他位取反,即0变为1,1变为0。 [+1] = [ 00000001 ] 原 [000 000 01]_原 [00000001]原 = [ 00000001 ] 反 [000 000 01]_反 [00000001]反 [-1] = [ 10000001 ] 原 [100 000 01]_原 [10000001]原 = [ 11111110 ] 反 [111 111 10]_反 [11111110]反
**补码:**正数的补码就是其本身,如果是负数,除符号位不变,其余位取反,最后+1(即在反码基础上+1) [+1] = [ 00000001 ] 原 [000 000 01]_原 [00000001]原 = [ 00000001 ] 反 [000 000 01]_反 [00000001]反 = [ 00000001 ] 补 [00000001]_补 [00000001]补 [-1] = [ 10000001 ] 原 [100 000 01]_原 [10000001]原 = [ 1111110 ] 反 [11 111 10]_反 [1111110]反 = [ 11111111 ] 补 [111 111 11]_补 [11111111]补
由上面我们可以看出,负数的原码和反码比较容易看出机器数的真值,补码就比较难看出了,其实可以将补码-1转换为反码,再将反码除符号位取反转换为原码,就能比较容易看出其真值,还有一种方法就是将机器数的补码再取补码就是原码了,即一个数的补码的补码等于原码。
计算机中使用补码来表示一个数,而不是使用原码。