补码运算的轨则[最新]
补码运算的法则
补码运算的法则要在“微机原理”这门课中讲到,在“数字电子技术”课中不作重点,只需一般了解即可。在数字电子技术教科书中,补码部分是用4位或5位2进制数来讲的,所以本文中也多以4、5位二进制数做例子。
利用补码运算必须确定运算数的位数,这样才能确定补码的模数。
在计算机中,带符号的数的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示方法有3种:原码、补码和移码。本文不讨论移码。
一、计算机中数的表示法
1. 原码
对一个二进制数而言,若用最高位表示数的符号(常以“0”表示正数,“1”表示负数),其余各位表示数的本身,则称为二进制数的原码表示法。例如:
设 A = + 1001 , B = - 0101,则[A]= 0 1001,[B]= 1 0101。[A]、[B]分别是A、B的原原原原
原码,是符号数值化了的数。符号数值化之前的带符号的数A、B称为是“真值”。
2. 补码
(1)补码的定义:
根据同余的概念
X + NK = X ( mod K ) „„„„„„?
括号中的部分不参加运算,它表示“K是模”。N是任意整数。该式的含义是,数X与该数加上其模的任意整倍数之和相等。例如钟表的表盘,模为12,不论指针转了几圈,3点总是3点。用定义式表示,即
3 + N×12 = 3
在?式中,当N=1时
有 [X] = X + K,[X]称为是X的补数。 补数补数
当 0 ? X , K时,[X]= X (正数的补码是其本身) 补数
当 - K ? X , 0 时,[X]= X + K(负数的补码 = X+K = 模,|X|)补数
例如表盘 模 = 12
当 X = 3 时,[3]= 3 ,其涵义是表针正着转了3 格; 补数
当 X = -3 时,[-3]= -3+12 = 9 ,其含义就是指针倒着转了3格,就等于正着转了9 格。补数
(因为X, 0 ? X+K = 模,|X| )
模 = “在限定的位数中可表示的最大数”加1 。
n在计算机中,一个机器数的字长为n位,它能够表示的最大数为n个“1”,其模为2。例如4位的机器数中,n = 4,可表示的最大数为1111B(1111B表示是一个二进制数),其
4模就是 1111B + 1 = 1 0000 = 2。
4位二进制数的模是1 0000,即16;而8位二进制数的模是1 0000 0000,即256。
再例如十进制的模是 10 ,十二进制的模是12。
n一个二进制数,若以2为模(n为二进制数的位数,通常与计算机中计其数的长度一致),
它的补码叫做2补码,简称补码。即
n-2当 0 ? X , 2 时,[X]= X 补
n-1nn当 – 2 ? X , 0 时,[X]= 2 + X =2 - | X | „„„? 补
同理,十进制的补码是10,十二进制的补码是12。再利用钟表的例子:
当 X = 3 时,[3]= 3; 补
当 X = -3 时,[-3]= -3+12 = 9 。 补
所以,正数的补码是它本身,负数的补码是负数加上模。
在二进制中,4位二进制数的时候,n = 4 ,根据 ? 式 ,
4-1的补码就是:[-1]= 2 + ( - 1 ) = 1 0000B – 1 = 1111B 补
5位二进制数的时候,n = 5 ,根据 ? 式 ,
5-1的补码就是:[-1]= 2 + ( - 1 ) = 1 00000B – 1 = 11111B 补
(2)补码的求法
? 根据定义求:
即上述的办法,显然很不方便。
? 保持符号位不变,数值位求反加1:
例如4位二进制数-001,其原码为[1001],则其补码为 [1001] =1110 + 1 = 1111。式中原补
的1110即为1001的反码,注意符号位——最高位的1不参加求反。
? 直接求补:
从最低位起,从右至左,到出现第一个1之前(包括第一个1)原码中的数字不变,以
后逐位求反,但符号位不变,即可直接得到补码。 例1:求补: n = 4 X = - 1 [- 1] = [1 0 0 1] = 1111 补原
求最后一位的1不变 反
例2: n = 8 X= - 1110 0000 [X] = 11110 0000 [X] = 10010 0000原补
二、补码的运算法则:
1.
无论正数还是负数,都是先求补,再相加,其和为补码。如果相加之和是正数,则即为
所求之和的原码,但是如果结果是负数,还应再求其补码,方能得到和的原码。
运算法则: [ X ]? [ Y ]= [ X?Y ] 补补补
[ [ X ]]= [ X ]补补原 例1:96-19 算法:X – Y = [ [X]+ [Y]] 补补补
[X] = [X]= 0110 0000B [Y] = [Y]= 0001 0011B [-Y] = 1110 1101B 补原补原补
符号位参加运算。 X – Y = [ [X]+ [Y]] = [ 0110 0000B + 1110 1101B ] = [ 0100 1101B ] = 0100 1101B补补补补补
01100000B
,11101101B
01001101B
[X-Y] = [X-Y]= 0100 1101B = +77 补原
例2: (-56)-(-17)=(-56)+17
[X] = 1011 1000B 原
[X]= 1100 1000B补
[Y] = 1001 0001B 原
[Y] = 1110 1111B 补
[ - Y ] = 0001 0001B 补
(-56)-(-17)=[[-56] + [17] ] = [ 1100 1000 + 0001 0001 ] = [ 1101 1001B ] 补补补补补 11001000B
,00010001B
11011001B
[X-Y]= [ [X-Y]]= [ 1101 1001]= 1010 0111B = -39 原补补补
2. 有关0的问题 原码中,+0 = - 0 = 0 补码中 0000 = 0 1000B = - 8,没有-0
3. 例 -1 -1 根据书上P8的例子,假如是5位机器数。
[-1] = [1 0001]= 1 1111 补补
-1-1=[-1]+ [-1]补补
11111B
,11111B
111110B
最高位的1溢出,不计,[ -1 ] + [ -1 ] = 1 1110 补补
因为结果是负值,所以不等于原码,应再求一次补