计组

机器码:

1.  原码表示法

x=+11001,则[x]原=011001
x=-10101,则 [x]原=110101

2. 反码表示法 (用于快速求补码)
二进制数求反码:
   正数:符号取0、各位数码位保持不变;
   负数:符号取1,各位数码位全部取反,
x= +10111 >0    按定义:  [x]反= 0 10111
y= -11011 <0    按定义:  [y]反= 1 00100

3.  (1)通过反码求补码的方法:
当x为正数时: [x]补=[x]反
当x为负数时: [x]补=[x]反+1
    (2)求一个负数的补码(正数保持不变)的另一种有效的转换方法:
对于负数,先写出其原码,符号位保持为1,数值部分由低位向高位转换,对开始遇到的0和第一个1,保持原值不变,第一个1以后的各位均取反。

4.(1)移码中符号位xn表示的规律与原码、补码、反码相反。
   (2)移码在数值上与补码一致,但是符号位与补码正好相反!

0的原码表示不唯一,有两种。 
0的补码只有一种形式. 
0的反码也有两种,不唯一硕。
即:[+0]反=000…0;[-0]反=111…1
[+0]原 =0000…0.      [-0]原 =1000…0.

例:已知x=+1011,y=-1101,求 [x]补、[y]补
按定义:x>0 [x]补 =[x]反= 0,1011(注:正数的补码、反码, 数值保持不变!)
y<0  [y]补 =[y]反+1
                   =1,0010+1
  =1,0011
例: y=-0.110100, 求[y]补
    解: [y]原=1110 100   (y<0)
      ∴  [y]补=1001 100
[y]反=1001011
[y]补=1001011+1
     =1001100(结果相同)

附:
原码的缺点1:
    注意到:“+0”、“-0” 原码在机器中有两种形式:   
原码的缺点2:
    由于数值部分是采用绝对值表示的,因而特别适
合于乘除运算,但是加减法运算却比较麻烦,而加减
法运算正是计算机中最常使用的运算。

所以,必须探讨解决方法——补码则正是一种解决方法。

运算

补码加法
补码加法的公式是:
[x]补+[y]补=[x+y]补。
∴ 补码加法可以连同符号位一起直接计算,即可得到“和的补码”
补码减法
补码的减法公式如下:
[x]补-[y]补=[x]补+[-y]补 =[x-y]补
下面的问题是:若已知[y]补,如何求取[-y]补?
对已知的[y]补:连同符号位一起,各位求反、最末位加1,即可得到 [-y]补。
  即:[-y]补= [y]补+1
 其中:符号[y]补表示:对[y]补连同符号位一起的求反。
[例] :x=+1011,  y=+0100,  计算:x+y=?
解: [x]补=0,1011,     [y]补=0,0100,
        [x+y]补 0,1111   >0  
∴     x+y=+1111 


[例]:x=+1011, y=-0101, 求x+y。
[解:]
[x]补=0,1011    [y]补=1,1011 
    [x]补   0,1011
+[y]补   1,1011 
[x+y]补  10,0110  
∴    x+y=+0110
可见,补码加法的特点为:
 1、符号位作为数的一部分直接参加运算;
 2、超过模数(Mod)的进位要自动丢掉。(小数的计算同样适合,只是模数不同)。
[例]  已知  x1= +1101,    x2 =-1110,
   求: [x1]补,  [-x1]补, [x2]补,  [-x2]补。 
[解:]
[x1]补=0,1101
[-x1]补= [x1]补+1=1,0010+0,0001=1,0011 
[x2]补=1,0010
[-x2]补= [x2]补+1=0,1101+0,0001=0,1110


[例]  x=+1101, y=+0110, 求x-y。
[解] :   [x]补=0,1101
[y]补=0,0110   [-y]补=1,1010
[x]补     0,1101
+[-y]补   1,1010 
   [x-y]补  1 0,0111 >0
∴  x-y=+0111


溢出概念与检测方法
溢出的特征:
   两个正数相加,结果为负(即:大于机器所能表示的最大正数),称为上溢。
   两个负数相加,结果为正(即:小于机器所能表示的最小负数),称为下溢。
[例]   x=+1011, y=+1001, 求x+y。
[解:]
[x]补=0,1011   [y]补=0,1001
[x]补    0,1011
+ [y]补   0,1001 
[x+y]补  1,0100 
   ∴  x+y=负值  ?
两正数相加,结果为负,显然错误。
      (运算中出现了“上溢”)
为了判断“溢出”是否发生, 可采用双符号位的方法
结论:
        采用变形补码后,两个补码相加,如果结果的符
号位出现“01”或“10”两种组合时, 表示发生溢出。
[例] x=+1100, y=+1000,求x+y。
[解] :
[x]补=00,1100, [y]补=00,1000
[x]补      00,1100
+[y]补    00,1000 
       01,0100
两个符号位出现“01”, 表示已溢出, 即结果大于最大值。(上溢)  
[例] x=-1100, y=-0110,  求x+y
[解] :
[x]补=11,0100, [y]补=11,1010
[x]补   11,0100
+[y]补  11,1010 
        10,1110
 两个符号位出现“10”,表示已溢出,即结果小于最小值。(下溢)
1、当以变形补码运算,运算结果的双符号位相异时,表示溢出;相同时,则表示未溢出。
2. 两变形补码相加,不论结果是否溢出,最高符号位Sf1总是结果的正确符号。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值