第2章 计算机中数制和编码

2.1   无符号数的表示和运算

    在计算机中,不仅数据是以二进制形式表示的,字母、符号、图形、汉字以及指令等都是以二进制形式表示的。

    图像,声音,电影,都是由二进制信息组成的。

如何区分不同进位记数制的数字

在数字后面加一个字母进行区分:

二进制:数字后面加 B , 1001B Binary
八进制:数字后面加 O , 1001O Octal
十进制:一般不加 , 1001 Decimal
十六进制:数字后面加 H , 1001H Hexadecimal

     2.各种数制的相互转换

    ① 任意进制数转换为十进制数的方法很简单,只要按其进制的多项式各位按权展开求和即可。

    2.1将二进制数1101.11转换十进制数。

   (1101.11)2=1´23+1´22+0´21+1´20+1´2-1+1´2-2

                                   =23+22+20+2-1+2-2

                       =8+4+1+0.5+0.25=(13.75)10

    十进制数转换为任意进制数的方法采用。

          R取余法(整数部分)

          R取整法(小数部分)。

    2.2将十进制数25.6875转换为二进制数和十六进制数。

   225          取余:1        0.6875×21.375    取整:1

    2 12        取余:0         0.375×20.75      取整:0

      2 6        取余:0           0.75×21.5        取整:1

       2 3       取余:1             0.5×21.0        取整:1

        2 1      取余:1

            0

    1625       取余:9       0.6875×1611.0    取整:11B

       161       取余:1

           0

   25.6875对应的二进制数为11001.1011B。十六进制数为19.BH(注:箭头为取数方向。)

十六进制和二进制之间的转换是非常简单的,只要按4位二进制数对应转换即可。方法是以小数点为界,整数部分自右至左,小数部分自左至右分组,二进制转换为十六进制,4位为一组,不足时补0

  2.3 将二进制数1101110.01011B转换为十六进制数,将十六进制数2F.1CH转换成二进制数。

】 

1101110.11011B0110,1110.1101,1000B6E.D8H

2F.1CH=0010,1111.0001,1100B=101111.000111B

    3. 二进制数的运算

  (1)算术运算规则

      加: 00101

           01110(有进位)

      减: 00110

           10011(有借位)

      乘: 0×01×11

           1×00×10

      除:1÷10÷1

   (2) 逻辑运算规则

     AND): 

 0∧00∧11∧01∧11

     OR):    

0∨00 0∨11∨01∨11

     NOT):0    10

     异或XOR):

 0⊕00⊕11⊕01 1⊕10

4. 无符号数的表示范围

 一个n位的无符号二进制数X,其表示范围为          

                0 X ≤ 2n-1

若运算结果超出这个范围,则产生进位或借位

      11111111

 +00000001

    100000000

结果超出8位(最高位有进位),发生进位。(结果为256,超出8位二进制数所能表示的范围255

2.2带符号数的表示及运算

计算机中的带符号二进制数

把二进制数的 最高位 定义为符号位

    符号位为 0表示正数,符号位为1表示负数


连同符号位一起数值化了的数,称为 机器数

机器数所表示的真实的数值,称为 真值

带符号数的二进制编码有三种方法: 原码 表示法、 反码 表示法和 补码 表示法。
原码 [ X ]

定义

  符号位:0表示正,1表示负;

   数值位:真值的绝对值。


原码的例子


0的原码

8 位数 0 的原码: +0 = 0 0000000

                             - 0 = 10000000

   即:数0的原码不唯一。

反码[X]

定义

X>0 ,则  [X] =[X]
X<0 ,则  [X] = 对应原码的符号位

                 不变,数值部分按位求反


X= -52 = -0110100

                [X]= 10110100

                [X]= 11001011

反码的例子


0的反码:

               [+0]= 00000000

               [-0]反 = 11111111

即:数0的反码也不是唯一的。

补码

定义:

X>0 , 则 [X] = [X] = [X]
X<0 , 则 [X] = [X] +1

X=–52= – 0110100

        [X] = 10110100

        [X] = 11001011

        [X] = [X]+1=11001100

n位补码表示数值的范围是


对应的补码是100...0011...1

0 的补码:

[+0] = [+0] =00000000
[-0] = [-0] +1=11111111+1

                          =1 00000000

            8位字长,进位被舍掉

[+0] = [-0] =00000000
特殊数 10000000

该数在原码中定义为: -0
在反码中定义为: -127
在补码中定义为: -128
对无符号数: (10000000) = 128

  3. 补码的运算

    目前,计算机中通常用补码进行带符号数的运算。补码运算的规则为:

   [X]±[Y][X±Y]补 

两数补码的和或差等于两数和或差的补码

   [[X]][X]

补码再求补等于原码

  4. 溢出及其判断方法

  (1) 进位与溢出

  进位:用来判断无符号运算结果是否超出了计算机所能表示的最大范围,是指运算结果的最高位向更高位的进位。

  溢出:用来判断带符号数运算结果是否超出了计算机补码所能表示的范围,是指带符号数的补码运算结果的溢出。

  (2)溢出的判断方法

  判断溢出的方法和多,常用的有:

  观察法:通过观察参加运算的两数的符号及运算结果的符号进行判断,仅适用于手工运算。

  双符号位法:通过运算结果的两个符号位的状态来判断结果是否溢出。

  单符号位法:通过符号位和数值部分最高位的进位状态来判断结果是否溢出。(也称双高位法)

  当两个带符号的二进制数进行补码运算时,若运算结果的绝对值超过运算装置的容量,数值部分便会发生溢出,占据符号位的位置,从而引起计算错误。这和补码运算过程中的正常溢出(符号位的进位)性质上是不同的。因此,微型计算机中判断带符号数补码运算的溢出采用双高位进位判别法。假设用OF表示溢出,用CF表示最高为(符号位)的进位,用DF表示次高为(数值部分最高位)的进位,则有

  OFCF∨DF  (OFCFDF)

     OF1说明结果溢出;若OF0说明结果不溢出。也就是说,当符号位和数值部分的最高位同时有进位或同时无进位时,结果没有溢出,否则,结果溢出。

  2.5 设有两个操作数x01000100B

y01001000B,将这两个操作数送运算器做加法运算,试问:

  ① 若为无符号数,计算结果是否正确?

  ② 若为带符号数,计算结果是否正确?

     【】     ∵            无符号数  带符号数

          01000100 68       [+68]

    +  01001000  +72   [+72]

         10001100    140   [-116]

      DF=1

     CF=0

   ∴ ① 若为无符号数,由于CF0(最高位向更高位的进位),说明结果未超出8位无符号数所能表达的数值范围(0~255),计算结果10001100B其真值为140,计算结果正确。

   若为带符号数补码,由于CF⊕DF1,结果溢出,运算结果不正确。其实不难看出,两个正数相加结果为负数,结果肯定不正确;原因是:+68+72两补码之和应为+140的补码,而8位带符号补码所能表达的数值范围为-128~+127,结果超出该范围,溢出,所以结果是错误的。

    2.6 设有两个操作数x=lllOlllOBy=l1001000B,将这两个操作数送运算器做加法运算,试问:

      若为无符号数,计算结果是否正确?

    若为带符号补码数,计算结果是否溢出?


若为无符号数,由于CF=1,说明结果超出8位无符号数所能表达的数值范围(0~255)。两操作数lllOlllOB11001000B对应的无符号数分别为238200,两数之和应为438>255,因此,计算结果是错误的。

    若为带符号数补码,由于CF⊕DF0,结果未溢出。两操作数lll01110B11001000B分别为-18和-56的补码,其结果应为-74的补码形式,而计算结果10110110B正是-74的补码,因此结果正确。

2.3信息的编码

信息的编码是计算机在进行人机交换信息时用到的信息(如数字、字母、符号等)的二进制编码。在计算机中常用的信息编码有两种:BCD码和ASCII码。

    1. BCD编码(二进制编码的十进制数)

    BCD码是用二进制编码表示的十进制数(Binary-CodedDecimal)。BCD码可分为两种:压缩型BCD码和非压缩型BCD码。

    压缩型BCD码:是用一个字节表示两位十进制数(每个十进制数用4个二进制数表示)

    ② 非压缩型BCD码是用一个字节表示一位十进制数(一位十进制数占用低4位二进制数,高4位二进制数为0)。

2.7  十进制数与BCD数相互转换

  ① 将十进制数69.81转换为压缩型BCD数:

  69.81(01101001.1000 0001)BCD

  BCD10001001.0110 1001转换为十进制数:

       (10001001. 0110 1001)BCD89.69

2.8  BCD码求3849=?

  】 

          0011 1000 38BCD

    +  01001001  49BCD

          10000001 81BCD码(结果不对)

    +  00000110  06BCD码(修正码)

          10000111 87BCD码(结果正确)

   ∴ 384987

   出错原因:十进制数相加是逢十进一,而4位二进制数相加相当于十六进制数相加是逢十六进一所以当相加结果超过9时将比正确结果少6,因此结果出错。 

   解决办法:对二进制加法运算结果采用6修正,从而将二进制加法运算的结果修正为BCD码加法运算结果。

   修正原则:

        如果两位BCD码的运算的结果大于9且小于16,则进行加6修正,若小于9,则不修正;

       如果两位BCD码的运算结果向高位有进位(即大于或等于16),则进行加6修正。

    2. ASCII字符编码

   ASCII码(AmericanStandard Code for Information Interchange美国标准信息交换码):是用一个字节来表示一个字符,采用7位二进制代码来对字符进行编码,最高位一般为07位二进制代码能表示27128种不同的字符,其中包括数字(0~9),英文大小写字母,标点符号及控制字符等,见教材P292.3

26 个小写字母、 26 个大写字母、 10 个数字、 32 个符号、 33 个代号和一个空格,总共 128 个字元码。

2.4数的定点与浮点表示法

在计算机中,用二进制表示实数的方法有两种:即定点表示法和浮点表示法。

   ①定点表示法:是指小数点在数中的位置固定。通常将数据表示为纯小数(小数点在数值位和符号位之间)或纯整数(小数点在数值位的最后)形式。  

浮点表示法:是指小数点在数中的位置是浮动的。通常浮点数的表示分为4部分:即尾数、数符、阶码和阶符。其中,尾数是二进制纯小数,指明数的全部有效数字;数符是一位二进制数,表示数的正负;阶码表示小数点移动的位数;阶符是一位二进制数,表示小数点移动的方向,阶符为0表示小数点向右移,为1表示向左移。阶码和阶符一起表示小数点的浮动位置。


1、  将十进制数转换为二进制和十六进制

(1) 129.75=1000 0001.11B81.CH     (2) 218.8125=1101 1010.1101BDA.DH

(3) 15.625=1111.101BF.AH           (4) 47.15625=10 1111.0010 1B2F.28 H

 

2、  将下列二进制数转换为十进制和十六进制

       (1) 111010 B=58 =3AH                 (2) 1011 1100.111B= 188.875= BC.E H

       (3) 0.1101 1B=0.84375 =0.D8H          (4) 11110.01 B=30.25 =1E.4H

 

3、完成下列二进制数的加减法运算

       (1) 1001.11+100.01=1110.00          (2)  1101010110.1001-01100001.0011=01110101.0110

       (3) 00111101+10111011=11111000   (4) 01011101.0110-101101.1011=101111.1011

 

4、完成下列十六进制数的加减法运算

       (1)   745CH+56DFH=D14B H         (2) ABF.8H-EF6.AH=9C28.E H     

       (3) 12AB.F7+3CD.05=1678 .FC H     (4)  6F01H-EFD8H=7F29 H

 

5、计算下列表达式的值

       (1)   128.8125+10110101.1011B+1F.2H=101010101.1010B          

       (2)   287.68-10101010.11H+8E.EH=103.CEH                

       (3)   18.9+1010.1101B+12.6H-1011.1001=36.525

 

6、选取字长n为8位和16位两种情况,求下列十进制数的补码。

       (1)   X=-33的补码: 1101 1111  1111111111011111

       (2)   Y=+33的补码: 0010 00010000 0000 0010 0001

       (3) Z=-128的补码:1000 0000  11111111 1000 0000

       (4)   N=+127的补码:0111 1111   00000000 0111 1111

       (5)   A=-65的补码: 1011 1111  11111111 1011 1111

       (6)   B=+65的补码: 0100 000100000000 0100 0001

       (7)   C=-96的补码: 1010 000011111111 1010 0000

       (8)   D=+96的补码: 0110 000000000000 0110 0000

 

7、写出下列用补码表示的二进制数的真值

       (1) [X]=10000000 0000 0000 H                   X1000 0000 0000 0000 H32768      

       (2) [Y]=00000001 0000 0001 H                   Y0000 0001 0000 0001 H257        

       (3) [Z]=11111110 1010 0101 H                    Z0000 0001 0101 1011 H347         

       (4) [A]=00000010 0101 0111 H                   A0000 0010 0101 0111 H599

 

8、设机器字长为8位,最高位为符号位,试对下列格式进行二进制补码运算,并判断结果是否溢出。

       (1) 43+8    

           ∵ [43]=00101011B,[8]=00001000B

        ∴  [43]+[8]=00101011B+00001000B=00110011B=33H

                            00101011B

                     +    00001000B                                              

                            00110011B                                              

           ∵  CS=0,CD=0,OF=CS⊕CD=0⊕0=0

           ∴  无溢出

 

(1)  43+8                  33H      (无溢出)        (2)  -52+7              D3 H      (无溢出)

(3)  60+90                 96H      (溢出)          (4)  72-8                 40 H      (无溢出)

     (5)  -33+(-37)              0BA H    (无溢出)        (6)  -90+(-70)      60 H              (溢出)   

       (7) ―9―(―7)           FE H     (无溢出)          (8)  60-90                 E2 H       (无溢出)

 

9、 设有变量x=11101111B,y=11001001B,z=01110010B,v=01011010B,试计算x+y=?,x+z=?,y+z=?,z+v=?,请问:① 若为无符号数,计算结果是否正确?② 若为带符号补码数,计算结果是否溢出?

       x+y = 11101111B+11001001B=10111000B=1B8 H

                            11101111 B

                     +    1100 1001B

                            1011 1000B

       ① 若为无符号数                              ② 若为带符号补码数

           ∵ CF=1     ∴不正确                   ∵ CF=1,DF=1  OF=0      ∴不溢出

 

          x+y= 0B8 H          x+z = 61 H           y+z= 3B H           z+v = 0CC H

     ①   不正确            不正确            不正确            正确   

      ②    不溢出           不溢出            不溢出                  溢出

































评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值