站内搜索

带符号数表示--机器数与真值--原码

原帖及讨论:http://bbs.bccn.net/thread-163277-1-1.html

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bccn.net
*/ 作者: 死了都要C    E-mail:w2008_    QQ:47441651
*/ 时间: 2007-8-16  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

                                     机器数与真值


    
   由于计算机只能直接识别和处理用0,1两种状态表示的二进制形式的数据,所以在计算机中无法按人门日常的书写习惯

用正负号加绝对值来表示数值,而与数字一样,需要用二进制代码 01 来表示 , 号.这样,在计算机中表示带符号

的数值数据时,数符和数据均采用0,1进行了代码化.这种采用二进制表示形式的连同数符一起代码化了的数据,在 计算机

中统称为机器数或机器码
.而与机器数对应的用正,负符号加绝对值来表示的实际数值称为真值.


  机器数可分为无符号数和带符号数两种.无符号数是指计算机字长的所以二进制位均表示数值.带符号数是指机器数分

为符号和数值部分,且均用二进制代码表示
.


                例  :  设某机器的字长为 8 位,无符号整数在机器中表示形式为:


                                      7          0
                                      -------------
                                        数    值    
                                      -------------
                      
                       带符号整数在机器中的表示形式为:


                                      7    6     0
                                      -------------
                                      符号 |  数值
                                      -------------  

                分别写出机器数 10011001 作为无符号整数和带符号整数对应的真值.
              
                解:  10011001 作为无符号整数时,对应的真值是 10011001(二进制) = 153(十进制)  .
                     10011001 作为带符号整数时,其最高位的数码1代表符号"-",所以与机器数 10011001 对应的
                              真值是 - 0011001(二进制) = - 25(十进制).



综上所述,可得机器数的特点为:

  (1) 数的符号采用二进制代码化,0代表"+',1代表"-".通常将符号的代码放在数据的最高位.

  (2) 小数点本身是隐含的,不占用储存空间.

  (3) 每个机器数数据所占的二进制位数受机器硬件规模的的限制,与机器字长有关.超过机器字长的数值要舍去.
      
      例如,如果要将 x=+0.101100111在字长为8位的机器中中表示为一个单字长的数,则只能表示为01011001,最

      底两位的两个1无法在机器中表示.


  
   因为机器数的长度是由机器硬件规模规定的,所以机器数表示的数值是不连续的.例如,8位的二进制无符号数可以

表示256个整数:  00000000-11111111可表示0-255; 8位二进制带符号数中: 00000000-01111111可表示正整数0-127;

11111111-10000000 可表示负整数 -127-0;,共256个数,其中00000000表示+0,10000000表示-0.


  在计算机中, 为了方便于带符号数的运算和处理,对带符号数的机器数有各种定义和表示方法,下面将接受带符号

数的原码,补码,反码和移码表示.  





                               原                    码
  
   原码表示的一种简单,直观的机器数表示方法,其表示形式与真值的形式最为接近.原码表示规定机器数的最高位为符

号位
,0表示整数,1表示负数,数值部分在符号位后面,并以绝对值形式给出.  


  
1. 原 码 的 定 义 .


     设 x 为二进制数,数值部分的位数为 n ,下式给出了 x 为纯小数 ±0.x1x2...xn 和 x 为纯整数 ±x1x2...xn时

  的原码表示的定义.


            纯 小 数 原 码 的 定 义 :


                          
                       X                   ( 1 ≤ X < 1 )
              [X]原  =                                                ( X为纯小数 )
                       1 - X = 1 + |X|     ( -1 < X ≤ 0)



            纯 整 数 原 码 的 定 义 :


                      
                       X                   ( 0 ≤ X < 2^n )  2^n指2的n次方后面都这样表示
              [X]原  =                                                 ( X为纯整数 )
                       2^n - X = 2^n + |X| ( -2^n < X ≤ 0)


    根据定义可以知, X 的原码 [X原] 是一个 n+1 位的机器数 x0x1x2....xn ,其中 x0 为符号位, x1x2...xn 为数值

部分, n 为 X 数值的长度.



    
例    已知 X , 求 X 的原码[X原].

          (1) X = +0.1010110 (2) X =-0.1010110 (3) X = +1010110 (4) X = -1010110
        
    解:   根据原码的定义,可得
          (1) [X原] = X = 0.1010110
          (2) [X原] = 1-X = 1+0.1010110 = 101010110
          (3) [X原] = X = 01010110
          (4) [X原] = 2^7-X = 2^7 + 1010110 = 10000000+1010110 = 11010110


由例题可知 :

          (1) [X原]的表示形式 x0x1x2...xn 为符号位加上 X 的绝对值. 当 X≥0 时,符号位 x0=0; X≤0 时,符号
              
              位  x0=1.
    
          (2) 当 X 为纯小数时,[X原]中的小数点默认在符号位 x0 数值最位 x1 之间; 当 X≥ 0时,[X原]=X;当X≤0

              时,[X原] = 1+|X| ,既符号位加上X的小数部分的绝对值.

              当 X 为纯整数时,[X原]中的小数点默认在数值位最底位 xn 之后; 当 X≥ 0时,[X原] = X; 当X≤0

              时,[X原] = 2^n+|X| ,其中 2^n 是符号位的权值, 2^n+|X| 相当于使符号位为 1 .

          (3) 将[X原]的符号取反,既可得到 [-X原] .



  2. 原 码 中 0 的 表 示

  
     根据定义式可知,在原码表示中,真值0有两种不同的表示形式,既 +0-0 .

    
     纯小数 +0 和 -0 的原码表示:
                              
     [+0原]  = 0.00...0        [-0原] = 1.00...0  

     纯整数 +0 和 -0 的原码表示:

     [+0原]  = 00...0        [-0原] = 100...0



  3. 原 码 的 左 移 和 右 移


     对于二进制纯小数 x = 0.x1x2...xn 来讲, 在求 2x 时,只需要将 x1x2...xn 依次左移一位,移出的最底位的空格

位填 0 即可, 即 2x=x1.x2...xn0 . 当然,为了保证 x 左移后仍然是纯小数, 0.x1x2...xn 中的 x1 应为 0, 否则就

会大于1, 而不是纯小数了. 在求 1/2x 时, 只需要将 x1x2...xn 依次右移一位,移出的最高位的空格
位填 0 即可, 即
1/2x=0.0x1x2...xn .如果仍然要保持 n 为数值, 则 x 右移后 ,将丢失最底位数字 xn .二进制纯整数的左,右移也可

以同样处理.


     由于原码是在二进制真值的基础上增加了符号的机器数,根据二进制数的移位规则个原码的定义,可知原码的移位规

则是: 符号位不变,数值部分左移或右移,移出的空位填 0 .




              例:   已知[X原],求[2X原],[1/2X原].

                    (1) [X原] = 0.0101001          (2)[X原] = 10011010

              解:   (1) [2X原]   = 0.1010010  左移后,符号位保持不变,最高位移出,最低位填 0 .
                        [1/2X原] = 0.0010100  右移后,符号位保持不变,最高位填 0,末尾的1移出.

                    (2) [2X原]   = 10110100
                        [1/2X原] = 10001101

              在原码的左移过程中,主要不要将高位的有效位数值育雏,否则将回出错.





  4.  原 码 的 特 点

      
      (1)原码表示直观,易懂,与真值的转化容易.

      (2)原码表示中的 0 有两种不同的表示形式,给使用带来了不便.
         通常 0 的原码用 [+0原] 表示,若在计算过程中出现了[-0原] ,则需要用硬件将 [-0原] 变为 [+0原] .

      (3)原码表示加减运算复杂.




   利用原码进行两次相加运算时,首先要判别两数的符号,若同号则做加法,如异号则做减法.在利用原码进行相减时 ,不

仅要判别两数绝对值的符号,使得同号相减,异号相加;还要判别两数绝对值的大小,用绝对值大的数减去绝对值小的数,取

取绝对值大的数的符号为结果符号. 可见原码表示不便于实现加减运算.



                     今天发的是原码知识````其他3码后面再发````不好意思啊```

 

  • 上一篇:最新Dev-c++与Allegor平台的搭建方法
  • 下一篇:编程证明出世界未解数学问题