您的位置:首页 > 职场人生

数的表示-原码、反码与补码

2008-10-28 16:35 204 查看
数的表示-原码、反码与补码
有符号的整数:

原码 反码 补码

+1 0000 0001 0000 0001 0000 0001(正数的原码、反码和补码相同)
-1 1000 0001 1111 1110 1111 1111(负数的反码是原码除符号位取反,补码是反码加1)

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负)。这就是机器数的原码了,假设机器能处理的位数为8,原码能表示的数值范围为-127到-0,+0到127总共256个。

有了数值的表示方法就可以对数进行算术运算。但是很快发现用带符号位的原码进行乘除运算时结果正确,而在加减运算时就出现了问题,谁都知道,1 - 1 = 1 + (-1) = 0

1的原码 0000 0001,-1的原码 1000 0001,如果我们用原码来计算的话有1 - 1 = 1 + (-1) = 0000 0001 + 1000 0001 = -2,这显然不正确。

因为在两个整数的加法运算中是没问题的,于是就发现问题出现在带负号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码,反码的取值空间和原码相同且一一对应,下面是反码的减法运算:
1的反码 0000 0001,-1的反码 1111 1110,1 - 1 = 1 + (-1) = 0000 0001 + 1111 1110 = 1111 1111 = (-0)有问题。

问题出现在+0和-0上,在人们的计算概念中零是没有正负之分的(印度人首先将零作为标记放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大)

于是就引入了补码的概念,在补码中用-128代替了-0,所以补码的表示范围为-128到0到127共256个

注意:-128没有相对应的原码和反码-128 = 1000 0000

补码的加减运算
0000 0001 + 1111 1111 = 0000 0000 = 0 正确
所以补码的设计目的是:1)是符号位能和有效值部分一起参加运算,从而简化运算规则。2)使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

两个补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

补码和原码的转换过程几乎是相同的。

模的概念:模是一个计量系统的计数范围,模实际上是计量器产生溢出的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。

对模而言存在一对补数,它们相加等于模,减一个数相当于加上它的补数。对于计算机而言,方法一样,把补数用到计算机对数的处理上就是补码的概念。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 反码 休闲 原码