机器数与数值

 日常生活中人们常用十进制、二进制、八进制、十六进制等等来表示数,而计算机内部表示数有特定的方式。

一、机器数与真值
  
在计算机中,只能表示0和1两种数码,所以计算机中任何信息都是采用0和1的组合序列来表示。
  机器数:一个数在机器(计算机)中的表示形式称为机器数。形式上为二进制数,但有别于日常生活中使用的二进制数。
   真值:机器数的实际值叫真值。真值往往是面向人的,可以用二进制数表示,也可用其它进制数表示,但根据习惯,常用十进制数表示,如图所示。

  机器数和日常生活中使用的二进制数比较,有以下特点:
  机器数为二进制形式,用0和1组合来表示数据。
  机器数符号数码化,数的最高位为符号位。当符号位为0,表示为正数;符号位为1,表示为负数。
  小数点不直接出现。机器数通过一定的方式来表示数的小数点位置,有定点表示法浮点表示法。
  机器数使用时需要明确采用的位数,相应有一定的表示范围。

二、计算机中符号数的表示方法
  
无符号数:表示比较简单,和其真值的二进制形式比较相近,其最高位不再是符号位,而是数值位。
  符号数:采用三种编码--原码、反码和补码,分别记作:[x]原、[x]反和[x]补。
  以下举例时采用数的位数为8位,但规则和方法也适用于n位机器数。
  1.原码
  
设X=±X1,X2,…,Xn-1,其中Xi为一位二进制数,i=1,2,…,(n-1)
  则

  即求一个数的原码:数值部分不变,符号“+”和“-”用0和1分别来表示。
  原码表示简单易懂,而且与真值的转换方便。但原码表示的数不便于计算机运算,因为在两原码数运算时,首先要判断它们的符号,然后再决定用加法还是用减法,致使机器的结构相应地复杂化或增加了机器的运算时间。
  采用原码表示数时表示范围为:-(-1)~+(-1)
  8位原码表示数的范围为:-127~+127
  2.反码
  
设X=±X1,X2,…,Xn-1,其中Xi为一位二进制数,i=1,2,…,(n-1)
  则

           式中

  即求一个数的反码:
  (1)对于正数,反码与原码相同,符号位为0,其余位为数值位本身;
  (2)对于负数,反码的符号位为1,其余位为数值位按位取反。
  采用反码表示数时表示范围为:-(-1)~+(-1)
  8位反码表示数的范围为:-127~+127
  3.补码
  补码是在同余的概念上延伸出来的。
  (1) 补码的求法

  设X=±X1,X2,…,Xn-1,其中Xi为一位二进制数,i=1,2,…,(n-1)

  

  上式求数的补码应该属于是一种经验公式,对有些特殊数不适用,如-128的8位补码。严格数学公式如下:

  [-128]=+x=10000000其中n=8,x=-128

  (2)由补码求真值
  正数的补码和真值之间对应关系直观;而已知一个负数的补码,可通过以下方法来求得真值:

              {[X]}=[X]

  也即把负数的补码当作原码来求补,得到的就为该负数的原码。由原码可以很方便得到真值。

  例 设[X]=10010111,求X的真值。

          11101000         
        +     1
         11101001   

  [X]=11101001,X=-1101001=-105。

  下面是部分十进制数及其对应的二进制数、原码、反码和补码表示归纳如下表,其中原码、反码和补码采用八位二进制代码表示。

十进制数二进制数原码反码补码
+0+0000000000000000000000000000000
+1+0000001000000010000000100000001
+2+0000010000000100000001000000010
+126+1111110011111100111111001111110
+127+1111111011111110111111101111111
-0-0000000100000001111111100000000
-1-0000001100000011111111011111111
-2-0000010100000101111110111111110
-126-1111110111111101000000110000010
-127-1111111111111111000000010000001
-128-1000000无法表示无法表示10000000

求原码、反码、补码演示:

小结:
  三种编码的最高位都是表示符号位。符号位为0,表示真值为正数, 其余位都是真值;
   符号位为1,表示真值为负数,其余位除原码外,不再是真值。
  对正数,三种编码都是一样的,[X]=[X]=[X]。对于负数,三种编码不同。
  当计算机采用不同的码制时,运算器和控制器的结构将不同。采用原码形式的计算机称原码机。类似的有反码机和补码机。小型计算机和微型计算机大都为补码机。

三、补码的运算
  1.补码运算的优点:

  (1)符号位可以直接参加运算;
  (2)求和及求差均可转化为单纯的相加运算。

  2.补码运算公式
  (1)[x+y]=+(x+y) =(+x)+(+y) =[x]+[y]
  (2)[x-y]=+(x-y) =+x++(-y) =[x]+[-y]
  [-y]的快捷求法:可通过对[y]"连同符号位在内一起变反加1"得到,也称为求变补。
      如:[y]=00000100
      则:[-y]=11111100
  3.补码运算举例:

   例1: x=56,y=-97,求x+y
    解: [x]=0011,1000  
       [y]=1001,1111
           
      00111000=[x]
                  +10011111=[y]
                  11010111
       
       原码为:10101001
       真值为:(-0101001)2=-41

   例2: x=122,y=37,求x-y。
    解:[y]=00100101
      [-y]=11011011
                 
01111010=[x]
                + 11011011=[-y]
                1 01010101

       进位自动舍去,真值为: (01010101)2=85

   例3:设x=64,y=65, 求x+y。
    解: 01000000=[x]
      +01000001=[y]
       10000001

    说明:
    1. 此时两个正数相加,得出负数,显然是错误的。
    2. 运算结果错误的原因是由于发生了溢出。溢出就是运算结果超过了数的表示范
      围。如8位补码表示数范围为-128~+127,而x+y的和为129,超过范围,所以产
      生"溢出"。

  4.补码运算小结:
  补码运算时,参加运算的两上数均为补码,结果也是补码,欲得真值,还需要经过转换。
  运算时,第一,符号位与数值位可以一起参加运算;第二,符号位产生的进位可以舍掉不管;第三,要保证运算结果不超过补码所能表示的最大范围,否则将产生"溢出"错误。

  为此,在计算机中设有专门电路用以判断运算结果是否产生溢出,并以某种标志告知本次运算的结果是否产生溢出。判断的规则为:运算的最高位的进位值(该位有进位值为1,无进位值为0)和次高位的进位值异或,结果为1表示有溢出,为0表示无溢出。

四、定点数与浮点数
  在计算机中,不仅要处理整数运算,而且也要处理小数运算,如何处理小数点位置是十分重要的,经常用定点法或浮点法来表示小数点的位置。
  1.定点表示法
  定点表示法就是小数点位置在数中固定不变。小数点位置可固定在任何位置,但一般情况下,或者把小数点固定在最高数值位左边,在小数点左边设有一位符号位,小数点本身不占位,其格式为:

   或者把小数点固定在最低数值位右边,其格式为:

    

  同一二进制数约定的小数点位置不同,相应地表示的数的真值也不相同,下例说明了这个情况:
  例1:在计算机中有如下一个8位二进制数N1

  

  同样的数据,约定的小数点的位置不同数的值也不同。

  例2:在计算机中有如下一个8位二进制数N2

  

  定点数运算较为不便,所表示的数范围小、精度低。

  2.浮点表示法
  为了在位数有限的前题下,尽量扩大数的表示范围,同时又保持数的有效精度,计算机往往采用浮点数表示数值。
  任何一个数的二进制形式均可如下表示:

  式中,N称为浮点数或实数。
     S是N的尾数,是数值的有效数字部分,通常用带符号的定点小数表示,一般用原
     码表示。

     p是指数,称为阶码,通常用带符号整数,一般用补码表示。
  阶码p的大小规定了数的范围,尾数S长短则规定了数的有效数字的位数(精度)。
  在计算机中,分别用一定位数的0,1表示阶码p和尾数S(均为二进制形式),p和
S确定则该浮点数的值也就确定。
  浮点数在机器中表示的一种形式如下:

  Pf表示阶码的符号位,当Pf=0时,表示阶码正;Pf=1时,表示阶码为负。
  S
f表示尾数的符号,当Sf=0时,尾数为正;Sf=1时,尾数为负。
  但同一个数N以浮点数表示
P和S可以有多种形式。若浮点数中1/2≤S<1,则称该浮点数为规格化了的浮点数。一般都采用规格化浮点数。
  
  假定尾数用8位二进制表示,阶码用4位二进制表示,均含符号位,且尾数用原码表示。则有
  
或表示成
  
  
同上例,阶码用补码表示,尾数用原码表示。
  
或表示成
  

  当尾数和阶码分别采用一定位数表示,则浮点数表示数的范围也就确定,若
  
则有
  
  由于指数可以选用不同的编码(原码、补码等),尾数的格式和小数点位置也可以有不同规定,因此,浮点数的表示方法不是唯一的。不同计算机有不同的规定,这就引起了相互间数据格式的不兼容性。为此,美国电气与电子工程师协会(IEEE)制订了有关的工业标准,已被众多计算机制造厂商采用。

五、BCD码及其十进制调整
  1.BCD码(Binary Coded Decimal)采用二进制代码表示十进制数,即用四位二进代码来表示一位十进制数。它貌似二进制,实为十进制,与真正的纯二进制是不同的;
  2.常用的8421BCD(简称NBCD)二进制形式和0~9数字所对应关系如下表所示。

十进制数NBCD十进制数NBCD
0
1
2
3
4
5
6
7
8
0000
0001
0010
0011
0100
0101
0110
0111
1000
9
10
11
12
13
14
15
16
17
1001
0001 0000
0001 0001
0001 0010
0001 0011
0001 0100
0001 0101
0001 0110
0001 0111


  
3.BCD码数运算后当有以下情况时需要对运算结果进行加6(0110)调整:
   若两个BCD数相加结果的相应四位大于9(1001)时,则应作修正。
   若两个BCD数相加结果在本位上并不大于9(1001),但却产生了进位,也应作修正。
   需要调整的原因:由于BCD码只是将每位十进制数用4位二进制数来表示,而每组4位二进制之间应该是逢十进一,但由于计算机总是将数作为二进制数来处理的,因此实际上这组
4位数和其它4位数是按逢十六进一处理的,
大于9时没有进位。计算机中有专用调整指令(如DAA,DAS),能按照规则自动进行调正。
  4.BCD码在计算机中有二种表示方法:一种是一个字节表示两位十进制数,称为压缩BCD码;一种是一个字节仅表示一位十进制数,称为非压缩BCD

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值