计算机中的数值数据表示

来源:互联网 发布:成都曼巨网络 编辑:程序博客网 时间:2024/05/02 01:44

无符号数和有符号数

如 N=[11001]2

若N是无符号数,则N=[25]10

若N为有符号数,则N=[-9]10

即无符号数就是用整个机器字长的全部二进制位均表示数值位,而有符号数的最高位被用来表示符号位,0表示正数,1表示负数。


原码表示法(sign-and-magnitude)

如果机器字长为n,则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。

对于纯小数或纯整数,正数的原码[X]=X,X>=0

对于负数  若X为纯小数[X]=1-X,-1<X<=0;若X为纯整数[X]=2n-X,-2n<X<=0

如n=8时

[-1]=1 0000001      [+1]=0 0000001

[-0]=1 0000000      [+0]=0 0000000


反码表示法(ones' complement)

在反码表示法中,最高位是符号位,0表示正号,1表示负号,正数的反码与原码相同,负数的反码则是其绝对值按位求反。

对于纯小数或纯整数,正数的反码[X]=X,X>=0

对于负数  若X为纯小数[X]=2-2-n+X,-1<X<=0;若X为纯整数[X]=2n+1-1+X,-2n<X<=0

如[-1]=1 1111110      [+1]=0 0000001

[-0]=1 1111111      [+0]=0 0000000


补码表示法(two's complement)

在补码表示法中,最高位是符号位,0表示正号,1表示负号,正数的补码与其原码和反码相同,负数的补码则是其反码加1。

对于纯小数或纯整数,正数的补码[X]=X,X>=0

对于负数  若X为纯小数[X]=2+X,-1<X<=0;若X为纯整数[X]=2n+1+X,-2n<=X<=0

如[-1]=1 1111111      [+1]=0 0000001

[-0]=0 0000000      [+0]=0 0000000

补码表示法不仅能比原码和反码多表示一个数(能多表示一个绝对值最大的负数),而且在整数运算中,可把减法运算用加法实现,为什么呢?

现计算Z=X-Y=X+(-Y)(机器字长为8位)

[-Y]=1 0000 0000-Y

[Z]=X+1 0000 0000-Y

假设X>=Y,则Z>=0,[Z]=Z,且X+1 0000 0000-Y必然溢出,所以舍去溢出位后X+1 0000 0000-Y=X-Y

Z=[Z]=X-Y。

若X<Y,则结果小于0,若仍用Z表示其绝对值,则

[-Z]对应的原码的的绝对值=Z

所以-Z=-(1 0000 0000-[-Z])=-(1 0000 0000-(X+1 0000 0000-Y))=X-Y

所以,在补码表示法中,用加法规则来进行减法运算能得到正确结果。


移码表示法(excess-N)

移码表示法是在真值N的基础上加一个常数(偏置值),相当于N在数轴上向正方向偏移了若干单位。

如果机器字长为n,偏置值为2n-1,则

若N为纯整数,[X]=2n-1+X,若X为纯小数,则[X]=1+X

如n=8时,[-1]=0 1111111      [+1]=1 0000001

[-0]=1 0000000      [+0]=1 0000000

事实上,在偏移2n-1的情况下,只要将补码的符号位取反便可得到相应的移码。

移码常用于表示浮点数的阶码。


原创粉丝点击