计算机内部,数是用二进制表示的。二进制数的编码方式有补码、原码、反码
和增码。二进制数的表示形式有定点表示(整数INTEGER和20到2-1之间的数)和浮点
表示两种。
无论什么数,它总是由符号和数值两部分组成。在计算机中数值和符号用某种
编码的形式表示。为明确起见,把原来的数值叫做真值,而把机器中对符号和数值
进行编码之后的数值叫做机器数。
1.原码
▲n位二进制定点小数X=x0x1x2...xn-1的原码[X]原定义为:
┌X 当1>X>=0时
[X]原=┤
└1-X=1+│X│ 当0>=X>-1时
其特点有:
(1)0的原码有两种,即0.0000...0和1.0000...0。
n个 n个
(2)数的表示范围[-(1-2-n+1),(1-2-n+1)]
(3)最高位为符号位.若负数时符号位为1;正数则符号位为0.
(4)作乘除运算时较为方便,但作加减运算时较为复杂.
例: 若X=0.0101101.则[X]原=0.0101101
若X=-0.1010010,则[X]原=1.1010010
▲n位整数X的原码定义如下:
┌X 当2n-1>X>=0时
[X]原=┤
└2n-1-x=2n-1+│X│ 当0>=X>-2-n-1时
2.补码
▲n位二进制定点小数X=x0x1x2...xn-1的补码[X]补定义为:
┌X 当1>X>=0时
[X]补=┤
└2+X=2-│X│ 当0>X>=-1时
其特点有:
(1)0的补码有只有一种形式,即0.0000...0
n个
(2)数的表示范围[-1,(1-2-n+1)]
(3)最高位为符号位.若负数时符号位为1;正数则符号位为0.
(4)对于两个数X,Y,且X+Y不溢出,则有[X+Y]补=[X]补+[Y]补.
(5)补码加法的溢出判别,若两数均为负数相加,则最高位进位是0为下溢;若
两数均为正数相加,则最高位是1为上溢;若一正数和一负数相加,则不会发生溢出.
(6)作加减运算时较为方便,但作乘除运算时要比原码复杂.
例:若 X=-0.1000100, 则[X]补=10-0.1000100=1.0111100
若 X=0.1000001, 则[X]补=X=0.1000001
注:负数补码的求法:按位求反末位加1
如:求-0.1000100的补码
(1)按位求反:1.0111011
(2)末位加1: 1.0111100
1.0111100即为-0.1000100的补码。
▲n位整数X的补码定义如下:
┌X 当2n-1>X>=0时
[X]补=┤
└2n+X=2n-│X│ 当0>X>=-2n-1时
3.反码
▲n位二进制定点小数X=x0x1x2...xn-1的反码[X]反定义为:
┌X 当1>X>=0时
[X]反=┤
2-2-n+1+X 当-1<X<=0时
其特点有:
(1)0的反码有两种,即0.0000...0和1.1111...1。
n个 n个
(2)数的表示范围[-(1-2-n+1),(1-2-n+1)]
(3)最高位为符号位.若负数时符号位为1;正数则符号位为0.
(4)反码和补码的关系:[X]补=[X]反+2-n+1.
(5)反码加法:[X+Y]反=[X]反+[Y]反+Ψ(Ψ为[X]反+[Y]反的最高位进位).
(6)反码加法的溢出判别和补码相同.
例: 若X=-0.1011 则[X]反=10-0.0001-0.1011=1.0100
若[X]补=1.0110, 求[X]反.
因为 [X]补=[X]反+0.0001
所以 [X]反=[X]补-0.0001=1.0101
或者:X=-10+1.0110=-0.1010
则[X]反=(10-0.0001)-0.1010=1.0101
▲n位整数X的反码定义如下:
┌X 当2n-1>X>=0时
[X]反=┤
└(2n-1)+X 当0>=X>-2n-1时
总之,一个正数X的原码、补码、反码均为其本身。一个二进制负数的原码、补
码、反码可用公式求得;一个负数的原码只要将符号位变为1,而其它都不变,一
个负数的反码只要将原码除符号位外其它位按位求反即可,一个负数X的补码可用
列方法求得:写出X的原码,将其按位求反,再在末尾加上1即可。
和增码。二进制数的表示形式有定点表示(整数INTEGER和20到2-1之间的数)和浮点
表示两种。
无论什么数,它总是由符号和数值两部分组成。在计算机中数值和符号用某种
编码的形式表示。为明确起见,把原来的数值叫做真值,而把机器中对符号和数值
进行编码之后的数值叫做机器数。
1.原码
▲n位二进制定点小数X=x0x1x2...xn-1的原码[X]原定义为:
┌X 当1>X>=0时
[X]原=┤
└1-X=1+│X│ 当0>=X>-1时
其特点有:
(1)0的原码有两种,即0.0000...0和1.0000...0。
n个 n个
(2)数的表示范围[-(1-2-n+1),(1-2-n+1)]
(3)最高位为符号位.若负数时符号位为1;正数则符号位为0.
(4)作乘除运算时较为方便,但作加减运算时较为复杂.
例: 若X=0.0101101.则[X]原=0.0101101
若X=-0.1010010,则[X]原=1.1010010
▲n位整数X的原码定义如下:
┌X 当2n-1>X>=0时
[X]原=┤
└2n-1-x=2n-1+│X│ 当0>=X>-2-n-1时
2.补码
▲n位二进制定点小数X=x0x1x2...xn-1的补码[X]补定义为:
┌X 当1>X>=0时
[X]补=┤
└2+X=2-│X│ 当0>X>=-1时
其特点有:
(1)0的补码有只有一种形式,即0.0000...0
n个
(2)数的表示范围[-1,(1-2-n+1)]
(3)最高位为符号位.若负数时符号位为1;正数则符号位为0.
(4)对于两个数X,Y,且X+Y不溢出,则有[X+Y]补=[X]补+[Y]补.
(5)补码加法的溢出判别,若两数均为负数相加,则最高位进位是0为下溢;若
两数均为正数相加,则最高位是1为上溢;若一正数和一负数相加,则不会发生溢出.
(6)作加减运算时较为方便,但作乘除运算时要比原码复杂.
例:若 X=-0.1000100, 则[X]补=10-0.1000100=1.0111100
若 X=0.1000001, 则[X]补=X=0.1000001
注:负数补码的求法:按位求反末位加1
如:求-0.1000100的补码
(1)按位求反:1.0111011
(2)末位加1: 1.0111100
1.0111100即为-0.1000100的补码。
▲n位整数X的补码定义如下:
┌X 当2n-1>X>=0时
[X]补=┤
└2n+X=2n-│X│ 当0>X>=-2n-1时
3.反码
▲n位二进制定点小数X=x0x1x2...xn-1的反码[X]反定义为:
┌X 当1>X>=0时
[X]反=┤
2-2-n+1+X 当-1<X<=0时
其特点有:
(1)0的反码有两种,即0.0000...0和1.1111...1。
n个 n个
(2)数的表示范围[-(1-2-n+1),(1-2-n+1)]
(3)最高位为符号位.若负数时符号位为1;正数则符号位为0.
(4)反码和补码的关系:[X]补=[X]反+2-n+1.
(5)反码加法:[X+Y]反=[X]反+[Y]反+Ψ(Ψ为[X]反+[Y]反的最高位进位).
(6)反码加法的溢出判别和补码相同.
例: 若X=-0.1011 则[X]反=10-0.0001-0.1011=1.0100
若[X]补=1.0110, 求[X]反.
因为 [X]补=[X]反+0.0001
所以 [X]反=[X]补-0.0001=1.0101
或者:X=-10+1.0110=-0.1010
则[X]反=(10-0.0001)-0.1010=1.0101
▲n位整数X的反码定义如下:
┌X 当2n-1>X>=0时
[X]反=┤
└(2n-1)+X 当0>=X>-2n-1时
总之,一个正数X的原码、补码、反码均为其本身。一个二进制负数的原码、补
码、反码可用公式求得;一个负数的原码只要将符号位变为1,而其它都不变,一
个负数的反码只要将原码除符号位外其它位按位求反即可,一个负数X的补码可用
列方法求得:写出X的原码,将其按位求反,再在末尾加上1即可。