天天看點

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示

  • 一、有符号數
    • 1.原碼表示法
    • 2.補碼表示法
      • 補數的概念
      • 補碼的定義
      • 反碼表示法
      • 移碼表示法
  • 二、數的定點表示和浮點表示
    • 1.定點表示
    • 2.浮點表示
      • 浮點數的表示形式
      • 浮點數的表示範圍
      • 浮點數的規格化
    • 3.定點數和浮點數的比較
    • 4.IEEE 754标準

一、有符号數

1.原碼表示法

  原碼是機器數中最簡單的一種表示形式,符号位為0表示正數,符号位為1表示負數,數值位即為真值的絕對值,故原碼表示又稱為帶符号的絕對值表示。

  整數原碼的定義為

[x]原={0,x2n−x,2n>x≥00≥x>−2n [ x ] 原 = { 0 , x 2 n > x ≥ 0 2 n − x , 0 ≥ x > − 2 n

式中,x為真值,n為整數的位數。

  小數原碼的定義為

[x]原={x,1−x,1>x≥00≥x>−1 [ x ] 原 = { x , 1 > x ≥ 0 1 − x , 0 ≥ x > − 1

  當x為0時, [+0.0000]原=0.0000 [ + 0.0000 ] 原 = 0.0000 , [−0.0000]原=1.0000 [ − 0.0000 ] 原 = 1.0000

  可見原碼中的“零”有兩種表示形式。

2.補碼表示法

補數的概念

  隻要确定了“模”,就可找到一個與負數燈架的整數來代替此負數,這樣就可把減法運算用加法實作。

  • 一個負數可用它的正補數來代替,而這個正補數可以用模加上負數本身求得。
  • 一個正數和一個負數互為補數時,它們絕對值之和即為模數。
  • 正數的補數即該正數本身。

補碼的定義

  整數補碼的定義為

[x]補={0,x2n+1+x,2n>x≥00>x≥−2n  (mod 2n+1) [ x ] 補 = { 0 , x 2 n > x ≥ 0 2 n + 1 + x , 0 > x ≥ − 2 n     ( m o d   2 n + 1 )

  小數補碼的定義為

[x]補={x,2+x,1>x≥00>x≥−1  (mod 2n+1) [ x ] 補 = { x , 1 > x ≥ 0 2 + x , 0 > x ≥ − 1     ( m o d   2 n + 1 )

  當x為0時, [+0]補=[−0]補=0.0000 [ + 0 ] 補 = [ − 0 ] 補 = 0.0000 ,即補碼中的“零”隻有一種表示形式。由于補碼中的零隻有一種表示形式,故它比原碼能多表示一個“-1”。

  當模數為4時,形成雙符号位的補碼。這種雙符号位的補碼又稱為變形補碼,它在階碼運算和溢出判斷中有其特殊作用。如x=-0.1001,對 mod 22 m o d   2 2 而言, [x]補=22+x=100.0000−0.1001=11.0111 [ x ] 補 = 2 2 + x = 100.0000 − 0.1001 = 11.0111

  對于負數,由 [x]補 [ x ] 補 求 [x]原 [ x ] 原 和由 [x]原 [ x ] 原 求 [x]補 [ x ] 補 都可用規則除符号位外,每位求反,末尾加一。

  不論真值是正還是負,由 [x]補 [ x ] 補 求 [−x]補 [ − x ] 補 求都是采用規則連同符号位在内,每位取反,末尾加一。

反碼表示法

  反碼同行用來作為由原碼求補碼或者由補碼求原碼的中間過渡。

  整數反碼的定義為

[x]反={0,x(2n+1−1)+x,2n>x≥00≥x>−2n  (mod(2n+1−1)) [ x ] 反 = { 0 , x 2 n > x ≥ 0 ( 2 n + 1 − 1 ) + x , 0 ≥ x > − 2 n     ( m o d ( 2 n + 1 − 1 ) )

  小數反碼的定義為

[x]反={x,(2−2−n)+x,1>x≥00≥x>−1  (mod(2−2−n)) [ x ] 反 = { x , 1 > x ≥ 0 ( 2 − 2 − n ) + x , 0 ≥ x > − 1     ( m o d ( 2 − 2 − n ) )

  當x為0時, [+0.0000]反=0.0000 [ + 0.0000 ] 反 = 0.0000

        [−0.0000]反=(10.0000−0.0001)−0.0000=1.1111 [ − 0.0000 ] 反 = ( 10.0000 − 0.0001 ) − 0.0000 = 1.1111

  可見 [+0]反 [ + 0 ] 反 不等于 [−0]反 [ − 0 ] 反 ,反碼中的“零”有兩種表示形式。

  實際上,反碼也可看作是 mod(2−2−n) m o d ( 2 − 2 − n ) (對于小數)或 mod(2n+1−1) m o d ( 2 n + 1 − 1 ) (對于整數)的補碼。與補碼相比,僅在末尾差1,故也稱小數的補碼為2的補碼,小數的反碼為1的補碼。

  對于負數,由 [x]反 [ x ] 反 求 [x]原 [ x ] 原 和由 [x]原 [ x ] 原 求 [x]反 [ x ] 反 都可用規則除符号位外,每位求反。

  三種機器數的特點可歸納如下:

  • 三種機器數的最高位均為符号位。符号位和數值部分之間可用“.”(對于小數)或“,”(對于整數)隔開。
  • 當真值為正時,原碼、補碼和反碼的表示形式均相同,即符号位用“0”表示,數值部分與真值相同。
  • 當真值為負時,原碼、補碼和反碼的表示形式不同,但其符号位都用“1”表示,而數值部分有這樣的關系:補碼是原碼的“求反加一”,反碼是原碼的“每位求反”。

移碼表示法

  移碼的定義為

[x]移=2n+x (2n>x≥−2n) [ x ] 移 = 2 n + x   ( 2 n > x ≥ − 2 n )

  其實移碼就是在真值上加一個常數 2n 2 n 。在數軸上移碼所表示的範圍恰好對應于真值在數軸上的範圍向軸的正方向移動 2n 2 n 個單元,故稱為移碼。

  當x為0時, [+0]移=[−0]移=1.0000 [ + 0 ] 移 = [ − 0 ] 移 = 1.0000 ,即移碼中的“零”隻有一種表示形式,故它比原碼能多表示一個負數。

  移碼的最小真值為全0。利用移碼的這一特點,當浮點數的階碼用移碼表示時,就能很友善地判斷階碼的大小。

  同一個真值的移碼和補碼僅差一個符号位,若将補碼的符号位由“0”改為“1”或從“1”改為“0”,即可得該真值的移碼。

二、數的定點表示和浮點表示

  共有兩種方法表示小數點的存在,即定點表示和浮點表示。定點表示的數稱為定點數,浮點表示的數稱為浮點數。

1.定點表示

  小數點在某一位置的數為定點數,有以下兩種格式。

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示

  當小數點位于數符和第一數值位之間時,機器内的數為純小數;當小數點位于數值位之後時,機器内的數為純整數。采用定點數的機器稱為定點機。數值部分的位數n決定了定點機中數的表示範圍。若機器數采用原碼,小數定點機中的數的表示範圍是 −(1−2−n) − ( 1 − 2 − n ) ~ (1−2−n) ( 1 − 2 − n ) ,整數定點機中數的表示範圍是 −(2n−1) − ( 2 n − 1 ) ~ (2n−1) ( 2 n − 1 ) 。

  在定點機中,由于小數點的位置固定不定,故當機器處理的數不是純小數或純整數時,必須乘上一個比例因子,否則會産生“溢出”。

2.浮點表示

  浮點數即小數點的位置可以浮動的數。

  通常浮點數被表示成

N=S×rj N = S × r j

式中,S為尾數,j為階碼,r是基數。在計算機中,基數可取2、4、8、16等。

  為了提高資料精度以及便于浮點數的比較,在計算機中規定浮點數的尾數用純小數形式。将尾數最高位為1的浮點數稱為 規格化數。浮點數表示成規格化形式後,其精度最高。

浮點數的表示形式

  采用這種資料格式的機器稱為浮點機。

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示

  浮點數由階碼j和尾數S兩部分組成。階碼是整數,階符和階碼的位數m合起來反映浮點數的表示範圍及小數點的實際位置;尾數是小數,其位數n反映了浮點數的精度;尾數的符号 Sf S f 代表浮點數的正負。

浮點數的表示範圍

  設浮點數階碼的數值位取m位,尾數的數值位取n位,當浮點數為非規格化數時,它在數軸上的表示範圍如下。

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示

  最大正數為 22m−1×(1−2−n) 2 2 m − 1 × ( 1 − 2 − n ) ;最小正數為 2−(2m−1)×2−n 2 − ( 2 m − 1 ) × 2 − n ;最大負數為 −2−(2m−1)×2−n − 2 − ( 2 m − 1 ) × 2 − n ;最小負數為 −22m−1×(1−2−n) − 2 2 m − 1 × ( 1 − 2 − n ) 。

  當浮點數階碼大于最大階碼時,稱為上溢,此時機器停止運算,進行中斷溢出處理;當浮點數階碼小于最小階碼時,稱為下溢,此時溢出的數絕對值很小,通常将尾數各位強置為0,按機器零處理,此時機器可以繼續運作。

  一旦浮點數的位數确定後,合理配置設定階碼和尾數的位數,直接影響浮點數的表示範圍和精度。對于短實數(總位數為32位),階碼取8位(含階符1位),尾數取24位(含數符1位);對于長實數(總位數為64位),階碼取11位(含階符1位),尾數取53位(含數符1位);對于臨時實數(總位數為80位),階碼取15位(含階符1位),尾數取65位(含數符1位)。

  當一個浮點數尾數為0時,不論其階碼為何值;或階碼等于或小于它所能表示的最小數時,不管其尾數為何值,機器都把該浮點數作為零看待,并稱之為機器零。如果浮點數的階碼用移碼表示,尾數用補碼表示,則當階碼為它所能表示的最小數 2−m 2 − m 且尾數為0時,其階碼(移碼)全為0,尾數(補碼)也全為0,這樣的機器零為000…00000,全零表示有利于簡化機器中判“0”電路。

浮點數的規格化

  将非規格化數轉換成規格化數的過程稱為規格化。對于技術不同的浮點數,因其規格化數的形式不同,規格化過程也不同。

  當基數為2時,尾數最高位為1的數為規格化數。規格化時,尾數左移一位,階碼減1(稱為左規);尾數右移一位,階碼加1(稱為右規)。

  當基數為4時,尾數最高兩位不全為零的數為規格化數。規格化時,尾數左移兩位,階碼減1;尾數右移兩位,階碼加1。

  當基數為8時,尾數最高三位不全為零的數為規格化數。規格化時,尾數左移三位,階碼減1;尾數右移三位,階碼加1。

  一般來說,基數r越大,可表示的浮點數範圍越大,而且所表示的數的個數也越多。但r越多,浮點數的精度反而下降。

3.定點數和浮點數的比較

  • 當浮點機和定點機中數的位數相同時,浮點數的表示範圍比定點數大得多。
  • 當浮點數為規格化數時,其相對精度遠比定點數高。
  • 浮點數運算要分階碼部分和尾數部分,而且運算結果都要求規格化,故浮點運算步驟比定點運算步驟多,運算速度比定點運算的低,運算線路比定點運算的複雜。
  • 在溢出的判斷方法上,浮點數是對規格化數的階碼進行判斷,而定點數是對數值本身進行判斷。

  浮點數在數的表示範圍、數的精度、溢出處理和程式程式設計方面(不取比例因子)均優于定點數。到哪在運算規則、運算速度及硬體成本方面又不如定點數。

4.IEEE 754标準

  浮點數一般采用IEEE指定的國際标準,這種标注形式如下。

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示

  按IEEE标準,常用的浮點數有三種:

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示

  階碼用移碼表示,階碼的真值都被加上一個常數(偏移量),如短實數、長實數、臨時實數的偏移量用十六進制數表示分别為7FH、3FFH、3FFFH。尾數部分通常都是規格化表示,即非“0”的有效位最高位總是“1”,但在IEEE标準中,有效位呈如下形式。

1♠ffff……fff 1 ♠ f f f f … … f f f

其中 ♠ ♠ 表示假想的二進制小數點。在實際表示中,對短實數和長實數,這個整數位的1省略,稱 隐藏位;對于臨時實數不采用隐藏位方案。

【筆記】計算機的運算方法(一)一、有符号數二、數的定點表示和浮點表示