2.2 數據的表示和存儲(二)

2.4 浮點數的編碼表示

1. 浮點數類型

C語言聲明 操作數類型 存儲長度(位)
float 單精度浮點數 32
double 雙精度浮點數 64
long double 擴展精度浮點數 80 / 96

2. 浮點數的表示

(1)浮點數(Floating Point)的表示範圍

  • 以下面的32位浮點數格式的規格化數爲例,計算表示範圍
    在這裏插入圖片描述
    ①第0位數符S;
    ②第1~8位爲8位移碼錶示階碼E(偏置常數爲128);
    ③第9 ~31位爲24位二進制原碼小數表示的尾數M;
    規格化尾數的小數點後第一位總是1,故規定第一位默認的“1”不明顯表示出來。這樣可用23個 數位表示24位尾數。
    在這裏插入圖片描述
  • 因爲原碼對稱,故其表示範圍關於原點對稱。可表示的範圍包括圖中陰影部分
    在這裏插入圖片描述
  • 機器0:即尾數爲0 或落在下溢區中的數
  • 浮點數範圍比定點數大,但數的個數沒變多,故數之間更稀疏,且不均勻

(2)規格化數形式(Normal format)

爲了能表示更多有效數字,通常規定規格化數的小數點前爲1

在這裏插入圖片描述

  • 32-bit 規格化數
    在這裏插入圖片描述
    其中:
     ①S是符號位(Sign)
     ②Exponent用移碼(增碼)來表示
     ③Significand 表示xxxxxxxxxxxxx(部分尾數) (基可以是2/ 4 / 8 / 16,約定信息,無需顯式表示)

(3) IEEE 754 標準

在這裏插入圖片描述

  • 單精度浮點數表示:
    在這裏插入圖片描述
    其中:
     ①Sign bit: 1 表示negative ; 0表示positive
     ②Exponent(階碼): 全0或全1用來表示特殊值
       SP規格化階碼範圍爲0000 0001 (-126) ~ 1111 1110 (127)
       偏置常數(bias)爲127 (single), 1023 (double)
     ③Significand(部分尾數):
       規格化尾數最高位總是1,所以隱含表示,省1位
       1 + 23 bits (single),1 + 52 bits (double)
    ==》單精度浮點(SP): (-1)Sx (1 + Significand) x 2(Exponent-127)
       雙精度浮點(DP): (-1)Sx (1 + Significand) x 2(Exponent-1023)

Q:爲什麼偏置常數要取127而不是128?

A: IEEE 754標準中,單精度浮點數可表示的範圍是0000 0001 (-126) ~ 1111 1110 (127);若偏置常數使用128,則32位浮點數可表示的範圍0000 0001 (-127) ~ 1111 1110 (126),[128-127=1,128+126=2^7 -1] , 而 2^126 ~2^127可表示的範圍比 2^-127 ~ 2^-127 大。

Q: 已知float型變量x的機器數爲BEE00000H,求x的值是多少?

A: 轉化爲二進制 :1 ,011 11101,110 0000 0000 0000 0000 0000

  • 數符: 1 (負數)
  • 階(指數): 爲避免混淆,用"階碼"表示階的編碼,用"階"或"指數"表示階碼的值
     階碼: 0111 1101B = 125
     階碼的值: 125 -127 = -2
  • 尾數數值部分: 1 +1x2-1+ 1x2-2+ 0x2-3+ 0x2-4+ 0x2-5+… =1+2-1+2-2= 1+0.5 +0.25 = 1.75

    所以,真值: -1.75x2-2= -0.4375


Q: 已知float型變量x的值爲-12.75,求x的機器數是多少?
A: -12.75=-1100.11B =-1.10011B x 23

  • 符號S=1
  • 階碼E=127+3=128+2=1000 0010
  • 顯式表示的部分尾數Significant = 100 1100 0000 0000 0000 0000

    所以: x 的機器數表示爲: 1 ,1000 0010, 100 1100 0000 0000 0000 0000
    轉換爲十六進制表示爲:C14C0000H

3. 其他形式的機器數表示

前面的定義是針對規格化形式(normalized form)的數 那麼,其他形式的機器數表示什麼樣的信息呢?

(1)0的機器數表示

  • How to represent 0?
    • exponent: all zeros
    • significand: all zeros
    • What about sign?Both cases valid.

+0: 0 00000000 00000000000000000000000
-0: 1 00000000 00000000000000000000000

(2)+∞/-∞的機器數表示

  • 浮點數除0的結果是+/-∞, 而不是溢出異常.(整數除0爲異常)
  • 爲什麼要這樣處理? 可以利用+∞/-∞作比較。例如:X/0>Y可作爲有效比較
  • How to represent +∞/-∞?
    • Exponent: all ones (11111111B = 255)
    • Significand: all zeros

+∞: 0 11111111 00000000000000000000000
-∞: 1 11111111 00000000000000000000000

(3)“非數”的表示(NaN)

  • 例如“Sqrt (-4.0) ”,“0/0”等的結果稱爲Not a Number (NaN) ,即“非數”
  • NaNs 可以幫助調試程序
  • How to represent NaN ?
    • Exponent: 255
    • Significand: nonzero

4. 非規格化數(Denorms)的表示

  • How to represent Denorms?
    • Exponent: 0
    • Significand: nonzero
      在這裏插入圖片描述

關於浮點數精度的一個例子
在這裏插入圖片描述
61.41999861.420002是兩個可表示數,兩者之間相差 0.000004。當輸入數據是一 個不可表示數時,機器將其轉換爲最鄰近的可表示數。

5. 總結

Exponent Significand 表示類型
0 0 +/-0
0 nonzero Denorms
1-254 任意,小數點前隱含1 Norms
255 0 +/-infinity
255 nonzero NaN

2.5 非數值數據的編碼表示

1. 邏輯數據的編碼表示

  • 何時會用到邏輯數據:表示邏輯(關係)表達式中的邏輯值(真/假 )
  • 表示: 用一位表示。N位二進制數(位串)可表示N個邏輯數據
  • 運算: 按位進行。如,按位與/ 按位或/ 邏輯左移/ 邏輯右移等
  • 識別: 邏輯數據和數值數據在形式上並無差別,也是一串0/1序列, 計算機靠指令來識別。

2. 西文字符的編碼表示

  • 特點
     是一種拼音文字,用有限幾個字母可拼寫出所有單詞
     只需對有限個字母和數學符號、標點符號等輔助字符編碼
     所有字符總數不超過256個,使用7或8個二進位可表示
  • 表示(常用編碼爲7位ASCII碼)
     十進制數字:0/1/2…/9
     英文字母:A/B/…/Z/a/b/…/z –專用符號:+/-/%/*/&/……
     控制字符(不可打印或顯示)
  • 操作
      字符串操作,如:傳送/比較 等
  • ASCII碼錶:0 -- 30H, A -- 41H , a -- 61H
    在這裏插入圖片描述

3. 漢字及國際字符的編碼表示

(1)漢字的編碼形式

  • 輸入碼: 對漢字用相應按鍵進行編碼表示,用於輸入
  • 內碼: 用於在系統中進行存儲、查找、傳送等處理
  • 字模點陣或輪廓描述: 描述漢字字模點陣或輪廓,用於顯示/打印

Q: 西文字符有沒有輸入碼?有沒有內碼? 有沒有字模點陣或輪廓描述?
A: 西文可由鍵盤直接輸入,不用輸入碼;但也有內碼和字模點陣。

(2)GB2312-80字符集

  • 由三部分組成
     ①字母、數字和各種符號,包括英文、俄文、日文平假名與片假名、羅馬字母、漢語拼音等共687個
     ②一級常用漢字,共3755個,按漢語拼音排列
     ③二級常用漢字,共3008個,不太常用,按偏旁部首排列
  • 漢字的區位碼
     ①碼錶由94行、94列組成,行號爲區號,列號爲位號,各佔7位
     ②指出漢字在碼錶中的位置,共14位,區號在左、位號在右
  • 漢字的國標碼
     ①每個漢字的區號和位號各自加上32(20H),得到其“國標碼”
     ②國標碼中區號和位號各佔7位。在計算機內部,爲方便處理與存 儲,前面添一個0,構成一個字節。

(3)漢字內碼

  • 至少需2個字節才能表示一個漢字內碼。爲什麼?
     由漢字的總數(超過6萬字)決定! 2^16=65536
  • 可在GB2312國標碼的基礎上產生漢字內碼
     爲與ASCII碼區別,將國標碼的兩個字節的第一位 置“1”後得到一種漢字內碼(可以有不同的編碼方案)
    在這裏插入圖片描述

4. 多媒體信息的表示

  • 圖形、圖像、音頻、視頻等信息在機器內部也用0和1表示
     – 圖形用構建圖形的直線或曲線的座標點及控制點來描述,而這些 座標點或控制點則用數值數據描述
     – 圖像用構成圖像的點(像素)的亮度、顏色或灰度等信息來描述 ,這些亮度或顏色等值則用數值數據描述
     – 音頻信息通過對模擬聲音進行採樣、量化(用二進制編碼)來獲 得,因此量化後得到的是一個數值數據序列(隨時間變化)
     – 視頻信息描述的是隨時間變化的圖像(每一幅圖像稱爲一幀)
     – 音樂信息(MIDI)通過對演奏的樂器、樂譜等相關的各類信息用 0和1進行編碼來描述
     – …….
  • 多媒體信息用一個複雜的數據結構來描述,其中的基本數據或者 是數值數據,或者是用0/1編碼的非數值數據

2.6 數據寬度和存儲容量的單位

1. 數據的基本寬度

  • 比特(bit,位)是計算機中處理、存儲、傳輸信息的最小單位
  • 二進制信息最基本的計量單位是“字節”(Byte) –現代計算機中,存儲器按字節編址
      – 字節是最小可尋址單位 (addressable unit )
      – 如果以字節爲一個排列單位,則LSB表示最低有效字節,MSB 表示最高有效字節
  • 除比特(位)和字節外,還經常使用“”(word) 作爲單位 。

“字”和“字長”的概念不同

  • “字長”指數據通路的寬度。 ”字長”等於CPU內部總線的寬度、運算器的位數、通用 寄存器的寬度(這些部件的寬度都是一樣的)
  • “字”表示被處理信息的單位,用來度量數據類型的寬度
  • 字和字長的寬度可以一樣,也可不同
    例1:對於x86體系結構,不管字長多少,定義“字”的寬 度都爲16位,而從386開始字長就是32位了。
    例2:對於MIPS 32體系結構,其字和字長都是32位。

    數據通路指CPU內部數據流經的路徑以及路徑上的部件,主要是 CPU內部進行數據運算、存儲和傳送的部件,這些部件的寬度基 本上要一致,才能相互匹配。

2.數據量的度量單位

  • 存儲二進制信息時的度量單位要比字節或字大得多
  • 容量經常使用的單位有:
     – “千字節”(KB),1KB=210字節=1024B
     – “兆字節”(MB),1MB=220字節=1024KB
     – “千兆字節”(GB),1GB=230字節=1024MB
     – “兆兆字節”(TB),1TB=240字節=1024GB
  • 通信中的帶寬使用的單位有:
      – “千比特/秒”(kb/s),1kbps=103 b/s=1000 bps
      – “兆比特/秒”(Mb/s),1Mbps=106 b/s=1000 kbps
      – “千兆比特/秒”(Gb/s),1Gbps=109 b/s=1000 Mbps
      – “兆兆比特/秒”(Tb/s),1Tbps=1012 b/s=1000 Gbps
    如果把b換成B,則表示字節而不是比特(位) 例如,10MBps表示10兆字節/秒

3. 程序中數據類型的寬度

  • 高級語言支持多種不同類型和 不同長度的數據
     –例如,C語言中char類型的寬 度爲1個字節,可表示一個字 符(非數值數據),也可表示 一個8位的整數(數值數據)
     –不同機器上表示的同一種類型 的數據可能寬度不同
  • 必須確定相應的機器級數據表示方式和相應的處理指令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章