二进制数与十进制数一样有正负之分。在计算机中,常采用数的符号和数值一起编码的方法来表示数据。常用的有原码、反码、补码、移码等。这几种表示法都将数据的符号数码化。为了区分一般书写时表示的数和机器中编码表示的数,我们称前者为真值,后者为机器数或机器码。
1. 原码表示法
原码表示法是一种比较直观的表示方法,其符号位表示该数的符号,正用“0”表示,负用“1”表示;而数值部分仍保留着其真值的特征。
若定点小数的原码形式为 x0 . x1 x2 … xn ,则原码表示的定义是:
式中[x]原是机器数,x是真值
例如,x=+0.1001,则[x]原=0.1001
x=-0.1001,则[x]原=1.1001
原码表示法有两个特点:
若定点整数的原码形式为 x0 x1 x2 … xn,则原码表示的定义是:
原码表示法的优点是比较直观、简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时,还要比较绝对值的大小,然后减去小数,最后还要给结果选择恰当的符号。显然,利用原码作加减法运算是不太方便的。为了解决这些矛盾,人们找到了补码表示法。
2. 补码表示法
由于计算机的运算受一定字长的限制,属于有模运算,所以,在计算机中可以使用补码进行计算。在定点小数机器中数最大不超过1,也就是负的小数对“1”的补码是等价的。但实际上,负数的符号位还有一个“1”,要把它看成数的一部分,所以要对2求补码,也就是以2为模数。
若定点小数的补码形式为x0 . x1 x2 … xn ,则补码表示的定义是:
采用补码表示法进行减法运算就比原码方便多了。因为不论数是正还是负,机器总是做加法,减法运算可变成加法运算。但根据补码定义,正数的补码与原码形式相同,而求负数的补码要减去|x|。为了用加法代替减法,结果还得在求补码时作一次减法,这显然是不方便的。从下面介绍的反码表示法中可以获得求负数补码的简便方法,解决负数的求补问题。
3. 反码表示方法
反码表示法中,符号的表示法与原码相同。正数的反码与正数的原码形式相同;负数的反码符号位为1,数值部分通过将负数原码的数值部分各位取反(0变1,1变0)得到。
若定点小数的反码形式为x0 . x1 x2 … xn ,则反码表示的定义是:
这就是通过反码求补码的重要公式。这两个公式告诉我们,若要一个负数变补码,其方法是符号位置 1,其余各位取反,然后在最末位上加 1 。
4. 移码表示法
移码通常用于表示浮点数的阶码。阶码是个n位的整数,假定定点整数移码形式为x0 x1 x2 … xn 时,移码的定义是:
由移码的定义式可知,对于同一个整数,其移码与其补码数值位完全相同,而符号位正好相反。
在上面所述的数据四种机器表示法中,移码表示法主要用于表示浮点数的阶码。由于补码表示对加减运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中,数用补码表示,补码存储,补码运算。也有些机器,数用原码进行存储和传送,运算时改用补码。还有些机器在做加减法时用补码运算,在作乘法时用原码运算。
以上来源于互联网。
例如:如果是8位机器码的话,
-5的
真值:-00000101
原码:10000101
反码:11111010
补码:11111011
机器码就是补码。
关键字: