计算机中数值型数据二进制形式存储过程中的原码,反码与补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

举个例子快速掌握吧

给一个数求补码

1、正整数的补码是其二进制表示,与原码相同

+9的补码是00001001,二进制表示也是00001001,原码:00001001

2、求负整数的补码,将其对应的二进制表示除了符号位的所有位取反后加1

-5的补码。-5是负数,符号位是1,则对应-5的二进制表示也是原码(10000101)符号位不变,其余位取反加1(11111011)。所以-5的补码是11111011。为,原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为10有两种表示:+0-0),其余位表示数值的大小。-5的原码即是其二进制表示。+11的原码为00001011-11的原码就是10001011

补码求原码

已知一个数的补码,求原码的操作其实就是对该补码再求补码:

1如果补码的符号位为“0”,其原码就是补码。

2如果补码的符号位为“1”,符号位不变,其余位取反加1,那么求这个补码的补码就是要求的原码。

e.g.已知一个补码为11111001,则原码是10000111-7)。

因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”

其余七位1111001取反后为0000110;(注:反码的概念就是符号位不变,其余位取反就是反码)

再加1,所以是10000111

已知补码求表示的数值

e.g.-65的补码是10111111

若直接将10111111转换成十进制,发现结果并不是-65,而是191

事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。

若要得到一个负二进制补码的数值,只需求对应的二进制表示即可,即只需求原码即可,只要对除符号位的其余位取反加1,就可算出其余位所表示的十进制数,将符号位变为负号-,加在这个十进制数前面即获得此数。

如:二进制值:10111111-65的补码)

除符号位其余位取反:11000000

111000001-65

+0与-0

首先正数的反码补码与原码相同

+0的原码:00000000

+0的反码:00000000

+0的补码:00000000

-0的原码:10000000

-0的反码:11111111(后面分析-0无反码)

-0的补码:00000000(补码规定0没有正负之分)

-128的原码:10000000

-128的反码:11111111

-128的补码:10000000

-0与-128有相同的反码,为减少歧义,-0没有反码。

综上所述:1.-128的补码和原码一样都是1000 0000,
          2.0的原码、反码和补码都一样(即0000 0000)
          3.如果把-0当做负数,1000 0000就会有歧义(事实上0的补码只有一个0000 0000)

补码的范围是[-2^(n-1),2^(n-1)-1]


你可能感兴趣的:(计算机与互联网,原码补码反码)