无符号数和有符号数
如 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的情况下,只要将补码的符号位取反便可得到相应的移码。
移码常用于表示浮点数的阶码。