原码表示法是机器数的一种简单的表示法。其符号位用 0 表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为 x ,则原码表示可记作[ x ]原。
例如, X1= + 1010110
X2= 一 1001010
其原码记作:
[ X1 ]原 =[ + 1010110] 原 =01010110
[ X2 ]原 =[ - 1001010] 原 =11001010
原码表示数的范围与二进制位数有关。当用 8 位二进制来表示小数原码时,其表示范围:
最大值为 0.1111111 ,其真值约为( 0.99 ) 10
最小值为 1.1111111 ,其真值约为(一 0.99 ) 10
当用 8 位二进制来表示整数原码时,其表示范围:
最大值为 01111111 ,其真值为( 127 ) 10
最小值为 11111111 ,其真值为(- 127 ) 10
在原码表示法中,对 0 有两种表示形式:
[ +0 ]原 =00000000
[ - 0] 原 =10000000
( 2 )补码表示法
机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加 1 而得到的。设有一数 X ,则 X 的补码表示记作[ X ]补。
例如, [X1]= + 1010110
[X2]= 一 1001010
[X1] 原 =01010110
[X1] 补 =01010110
即 [X1] 原 =[X1] 补 =01010110
[X2] 原 = 11001010
[X2] 补 =10110101 + 1 = 10110110
补码表示数的范围与二进制位数有关。当采用 8 位二进制表示时,小数补码的表示范围:
最大为 0.1111111 ,其真值为( 0.99 ) 10
最小为 1.0000000 ,其真值为(一 1 ) 10
采用 8 位二进制表示时,整数补码的表示范围:
最大为 01111111 ,其真值为( 127 ) 10
最小为 10000000 ,其真值为(一 128 ) 10
在补码表示法中, 0 只有一种表示形式:
[ + 0] 补 =00000000
[ + 0] 补 =11111111 + 1=00000000 (由于受设备字长的限制,最后的进位丢失)
所以有 [ + 0] 补 =[ + 0] 补 =00000000
( 3 )反码表示法
机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数 X ,则 X 的反码表示记作[ X ]反。
例如: X1= + 1010110
X2= 一 1001010
[ X1 ]原 =01010110
[X1] 反 = [ X1 ]原 =01010110
[X2] 原 =11001010
[X2] 反 =10110101
反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加 1 ,就得到了该负数的补码。
例 1. 已知 [X] 原 =10011010 ,求 [X] 补。
分析如下:
由 [X] 原求 [X] 补的原则是:若机器数为正数,则 [X] 原 =[X] 补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加 1 而得到。现给定的机器数为负数,故有 [X] 补 =[X] 原十 1 ,即
[X] 原 =10011010
[X] 反 =11100101
十) 1
[X] 补 =11100110
例 2. 已知 [X] 补 =11100110 ,求[ X ]原。
分析如下:
对于机器数为正数,则[ X ]原 = [ X ]补
对于机器数为负数,则有[ X ]原 = [[ X ]补]补
现给定的为负数,故有:
[ X ]补 =11100110
[[ X ]补]反 =10011001
十) 1
[[ X ]补]补 =10011010= [ X ]原
求补码的方法:设X;若X≥0,则符号位(原码最高位)为0,X其余各位取值照抄;若X≤0,则符号位为1,其余各位按位取反后,最低位加1。
【例5】X=+1001001 [X]补 = 01001001
【例6】X=-1001001 [X]补 = 10110111
补码加减法
计算机中实际上只有加法,减法运算转换成加法运算进行,乘法运算转换成加法运算进行,除法运算转换成减法运算进行。用补码可以很方便的进行这种运算。
1、补码加法
[X+Y]补 = [X]补 + [Y]补
【例】X=+0110011,Y=-0101001,求[X+Y]补
[X]补=00110011 [Y]补=11010111
[X+Y]补 = [X]补 + [Y]补 = 00110011+11010111=00001010
注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是
100001010,而是00001010。
2、补码减法
[X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补
其中[-Y]补称为负补,求负补的方法是:对补码的每一位(包括符号位)求反,最后末位加“1”。
【例】X=+0111001,Y=+1001101,求[X-Y]补
[X]补=00111001 [Y]补=01001101 [-Y]补 = 10110011
[X-Y]补 = [X]补 + [-Y]补 = 00111001+10110011=11101100