电工学习网

 找回密码
 立即注册

计算机中数和字符的表示

2015-3-21 14:46| 编辑:电工学习网| 查看: 8465| 评论: 0

    一、带符号二进制数表示

    1、什么是字长?

    计算机数据线一次能传送的最大的二进制数的位数。常用的字长:

    8位、   16位、     32位

    ↓       ↓        ↓

    Z80      IBMPC      80386

    Apple      PC/XT      80486

    PC/AT

    2、无符号二进制数

    在字长范围内,所有二进制位都是数值位。

    字长8位: 0~255           00H~FFH

    字长16位: 0~65535    0000H~FFFFH

    字长32位: 0~4294967295  0000 0000H~FFFF FFFFH

    3、有符号二进制数

    在字长范围内,最高二进制位为符号位,其余位为数值位。

    字长8位:数值范围  80H~7FH    -128~+127

    字长16位:     8000H~7FFFH  -32768~+32767

    字长32位:   8000 0000H~7FFF FFFFH  -2147483648~+2147483647

    二、带符号数的补码表示

    在计算机中,任何一个带符号数,都是以补码的形式进行存贮和管理的。

    1、带符号数的原码表示

    最高位为符号位,其余位是数值位。

    [+121]原= 0111 1011       0000000001111011

    [-121]原= 1111 1001       1000000001111001

    [+0]原= 0000 0000        0000000000000000

    [-0]原= 1000 0000        1000000000000000

    2、补码表示

    (1)正数,同原码

    (2)负数,原码的每一位(符号位除外)取反,再在末位加1

    例:字长8位,求-11的补码

    原码         1000 1011

    各位取反     1111 0100

    末位加1      1111 0101

    例:字长8位,求-0的补码

    原码        1000 0000

    各位取反    1111 1111

    末位加1     0000 0000

    还有一种办法可以写出一个负数的补码:

    令,则[x]补码=,     n是字长的位数

    例:  [-1]补=    = 1111 1111

    [-127]补=  = 1000 0001

    [-64]补=  =  1100 0000

    [-5]补=   =  1111 1011

    [-128]补=  =  1000 0000 

    3、由补码求真值(补码对应的十进制数)

    原码就是数字本身,例如:

    (+7)的原码=0000 0111 最高位为符号位(0表示正数)

    (–7)的原码=1000 0111 最高位为符号位(1表示负数)

    反码就是将原码按位求反(符号位不变),例如:

    (+7)的反码=0111 1000 符号位不变

    (–7)的反码=1111 1000 符号位不变

    从计算机运算的角度来讲,“符号位不变,将原码求反再加一”的算法是很方便的,但对于读者理解补码的概念没有多大帮助。

    例如:求(–7)的补码。

    

    注意:当负数以补码的形式表示时,求该数的原值仍用“求反再加一”的方法,例如,

    

    如果是正数,就不能用上述方法。正数的补码就是该数的本身,所以本书中不引入“正数的补码就是原码”的概念。

    其实补码是针对负数来说的,计算机中只有加法器(没有减法器),引入补码的目的是为了将减法计算变为加法计算。

    有了只有负数才有补码的概念后,我们就可将注意力放在负数上。让我们以时钟来说明补码的概念,见表1-1。

    表  1-1

   时    间

           逆时针时间

   0(12)

  (–12)    (–12)的补码 = 12 – |–12| = 

1

  (–11)    (–11)的补码 = 12 – |–11| = 

2

  (–10)    (–10)的补码 = 12 – |–10| = 

3

  (–09)     (–9)的补码 = 12 – |–09| = 

4

  (–08)     (–8)的补码 = 12 – |–08| = 

5

  (–07)     (–7)的补码 = 12 – |–07| = 

6

  (–06)     (–6)的补码 = 12 – |–06| = 

7

  (–05)     (–5)的补码 = 12 – |–05| = 

8

  (–04)     (–4)的补码 = 12 – |–04| = 

9

  (–03)     (–3)的补码 = 12 – |–03| =

10

  (–02)     (–2)的补码 = 12 – |–02| = 

11

  (–01)     (–1)的补码 = 12 – |–01| = 

    结论:时间的表示范围:(–12 ~ +11)

    (–x)的补码 = 模 – |–x|      (模 = 状态的个数0,1,2,…,11)

    例如:求时间 –2 的补码。

    (–2)的补码 = 12 – |–2| = 10

    例如:通过补码将减法转为加法。

    11–10 = 11 +(–10)的补码 = 11+2 = 13(13 – 12 = 1)

    11–1 = 11 +(–1)的补码 = 11+11 = 22(22 – 12 = 10)

    12–12 = 12 +(–12)的补码 = 12+0 = 12(12 – 12 = 0)

    将补码用于1个字节:

    

    模==128(模 = 状态的个数 0~127)  (127=7FH)

    (–1)的补码 = 128 – |–1|=128–1=127(7FH),再加上符号位,即为0FFH

    (–2)的补码 = 128 – |–2|=128–2=126(7EH),再加上符号位,即为0FEH

    (

    (–127)的补码 = 128 – |–127|=128–127=1(01H),再加上符号位,即为81H

    (–128)的补码 = 128 – |–128|=128–128=0(00H),再加上符号位,即为80H

    1 个字节可表示的数:(–128 ~ 127)

    将补码用于1个字:

    

    模==32768(模=状态的个数0~32767) (32767=7FFFH)

    (–1)补=32768–|–1|=32768–1=32767(7FFFH),再加上符号位,即为0FFFFH

    (–2)补=32768–|–2|=32768–2=32766(7FFEH),再加上符号位,即为0FFFEH

    (

    (–32767)补=32768–|–32767|=1(0001H),再加上符号位,即为8001H

    (–32768)补=32768–|–32768|=0(0000H),再加上符号位,即为8000H

    1个字可表示的数:(–32768 ~ 32767)

    4、补码的应用

    1、补码的运算规则

    [x+y]= [x] +[y]

    [x-y]= [x] +[-y]

    2、引进补码后,减法可以变成加法

    例1:8-2  =  [8]+[-2] =+6

    0000 1000

    + 1111 1110    →-2补码

    丢失 ← 1 0000 0110

    例2:64-(-10)=[64]+[10] =74

    0100 0000

    + 0000 1010

    0100 1010   

    例3:64-10=[64]+[-10]=54

    0100 0000

    + 1111 0110

    1 0011 0110  

看过《计算机中数和字符的表示》的人还看了以下文章:

发表评论

最新评论

电工学习网 ( )

GMT+8, 2023-4-4 23:37

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部