數值型數據的表示
在計算機中,無論是何種形式的數據均采用數字化形式表示,即用“0”、“1”兩個基本符號構成的編碼表示,以便采用數字電路實現其存儲與處理。
- 本節主要內容
- 數制
- 數的機器數
- 定點與浮點格式
數制
二進制閱讀、書寫不方便,引入八進制、十六進制。它們與十進制之間以及相互之間如何轉換?
各種數制
數制之間的轉換
- N進制 ? 十進制 “按權展開再相加”
- 十進制 ? N進制 整數部分:除N直到商為0,倒取余 小數部分:乘N直到精度滿足要求,正取整 例:28.628 = 11100.101B
- 十進制 ? N進制
十進制轉換二進制,常用湊數法。
- 二進制 ? 十六進制
以小數點為中心,向左右兩邊4位一組,不夠4位的左邊前補0,右邊后補0,然后把每4位寫出對應的十六進制數。
- 十六進制 ? 二進制
將每一個十六進制數碼寫成對應的4位二進制碼,前后的無效0去掉。
二進制與八進制間的互換與十六進制間的互換類似。
機器數
真值
正號(+)、負號(-)加二進制或者十進制的數值表示數據大小的形式在計算機原理中稱為真值。 如:+1011101B,或 -123.45
其中:“+”號經常省略。
機器數
數據在計算機中存儲或處理的數據形式稱為機器數。
正、負號也要用0、1表示。
機器數分有無符號數和有符號數。
無符號數
整個機器字長的二進制位均為數值位,沒有符號位。相當于數的絕對值。
例如:10000011B表示十進制無符號數的131。
字長為n位的無符號數的表示范圍為0~2(n)-1。
若字長為8位,則表示無符號數的范圍為0~255。
有符號數
約定:機器字的最高位為符號位,其余位為數值部分。一般“0”表示正數,“1”表示負數。
例如:真值為-1011101B的機器數可以表示為:
11011101。
符號位和數值位如何聯合表示一個數?計算機中有多種編碼形式,以適應不同的應用場合的需要。常用的編碼形式有:
- 原碼
- 反碼
- 補碼
- 移碼
一、原碼
- 定義:
最高位為符號位,0表示正,1表示負,的數值部分為真值絕對值。
即:除去符號用0或1表示外,其余部分與真值(二進制)相同。
例如,8位機中,x=+1001101時,x=01001101
x=-1001101時,x=11001101
再如,5位機中,x=+0.1001時, x=0.1001
x=-0.1001時, x=1.1001
- 原碼定義的數學表達式---用于一些數學推理
若真值x為純整數數,n位機中:
若真值x為純小數,n位機中:
根據原碼的定義,0的原碼有兩種不同的形式:
原碼表示的數據范圍
純整數n位機中:
純小數n位機中:
優點:直觀易懂,與真值之間轉換簡單;
實現乘、除法運算規則簡單。
缺點:實現加、減運算的規則較復雜,電路實現困難。
二、反碼
-
定義
正數的反碼和原碼相同;
負數的反碼是將原碼中符號位不變,數值部分中的各位變反。
例如:
8位純整數機中,
8位純小數機中,
-
反碼特點
-
0的反碼也有兩種不同的形式:
-
表示的數據范圍與原碼一樣:
純整數n位機中:
純小數n位機中:
三、補碼
是否能將減法運算化為加法?
(1)模和補數
- 以鐘表為例,假設當前時針指向8點,若要將時針撥到6點,有兩種方法:
逆時針撥2小時,或順時針撥10小時。
前者代表8-2=6,后者可以認為是8+10=6(mod 12)。
在模為12時,-2和+10等價。稱-2的補數是10。
- 啟發:減法運算可以轉換為加該數的補數。
補碼定義
有符號數x的補碼定義為:
對于n位純整數機,其模為2(n) ,數x的補碼為:
對于n位純小數機,其模為2 ,數x的補碼為:
按照定義求補碼
補碼****表示的數據范圍
注意:
補碼表示的數據范圍比原碼在負數方向多一個值。
補碼中,100...0中的最高位1既表示符號,又是數值位。
如,8位整數機,10000000是-128的補碼;
8位小數機,1.0000000是-1的補碼。
根據補碼的定義,0的補碼表示只有形式:000…0
定點和浮點格式
定點格式表示的數據范圍
有符號數的編碼不同,所表示的數據范圍不同。
四、移碼
移碼主要用于表示浮點數的階碼。由于階碼是整數,這里只討論x是整數時的移碼。
注意 : 移碼符號位****的表示規律與原碼、反碼、補碼的相反。
移碼特點
如果將移碼看作無符號數,其大小直觀地反映了真值的大小。移碼全為0時,所對應的真值最小,全為1時,所對應的真值最大。因此,浮點數的指數(階碼)常用移碼表示。這樣比較兩個浮點數大小時,階碼編碼大數就大。
四種編碼小結
各有所長,分別使用在不同的場合。補碼表示時加減運算方便,目前機器中廣泛采用補碼存儲和運算。有些機器做加減運算時采用補碼,做乘除運算時采用原碼。移碼主要用于表示浮點數的階碼。
同一個二進制碼,所表示的含義不同,相對應的實際值不同。下表給出8位二進制碼00000000~11111111含義不同時,與其實際值之間的相應關系。
在計算機中,小數點的問題如何解決?
計算機中,沒有專門設置電路來表示數據的小數點,而是采用不同的數據格式約定小數點的位置。
常用的數據格式:
- 定點格式
- 浮點格式
定點格式
-
約定機器中小數點在數據編碼中的位置固定不變。
-
由于已約定,機器中不再用“.”記號表示。
-
任意n位定點數x,在計算機中的格式為:
-
理論上講,小數點可以固定在任何位置。但計算機設計時通常將數據設定為純小數和純整數兩種。
定點格式表示的數據范圍
有符號數的編碼不同,所表示的數據范圍不同。
- 將其轉化為定點機所能處理范圍內的數據,得到的運算結果再根據比例因子還原成實際值。
- 定點格式所能處理的數據范圍十分有限。如果同時有絕對值非常大或絕對值非常小的數,用同樣的比例因子進行處理,很難兼顧數值范圍和運算精度的要求,為此引入浮點數表示。
浮點格式—浮點數
- 浮點數:小數點在數據中的位置可以浮動。
- 任意一個R進制數N,其浮點數可以寫成:
其中:
- M尾數:表明數據有效位數,決定了數據的精度。
- E階碼:一個整數,指明小數點的位置。決定數據的大小。
- R基數:計算機中一般規定為2、8或16。
例如,二進制數101.00101的浮點數形式可以寫成:
- 階碼的取值不同,小數點的位置在尾數中進行浮動。
浮點格式— 一般格式
- 浮點數的一般格式為:
基數約定為2,階碼E和尾數M是有符號數。
- 浮點數的具體格式有很多種形式:
- 尾數和階碼可采用不同的機器碼
- 數符的位置也可放在首位
- 多數尾數是純小數,采用原碼或補碼表示。IEEE754浮點格式尾數采用1.M形式。
- 階碼為純整數,可以采用補碼或移碼表示。
浮點格式—表示的數據范圍
- 浮點格式表示的數據范圍主要由階碼的位數決定,精度主要由尾數的位數決定。
- 階碼和尾數采用的機器碼不同,其所能夠表示的數據范圍不同。
- 例如:32位浮點格式,階碼8位(含階符1位)移碼表示;尾數24位(含數符1位)補碼表示。
浮點格式—表示的數據范圍
32位浮點格式,階碼8位(階符1位)移碼表示;尾數24位(含數符1位)補碼表示。其能表示的數據范圍:
顯然,浮點格式表示的數據范圍比定點格式要大很多
浮點格式—機器零
機器零的規定:
- 浮點數的尾數值為零時;
- 階碼小于機器所能表示的最小值時;
浮點格式—規格化
-
同一數的浮點表示形式是不唯一的。
例如:二進制數101.00101的浮點數可以寫成:
-
規格化的概念
-
為了充分利用尾數有限的位數,提高運算的精度,存儲數據中盡可能多是有效數字。
-
規定:浮點數尾數值不為0時,其最高數值位應是有效位,即尾數的絕對值應大于或等于0.5。這種形式的浮點數稱為規格化浮點數。
-
規格化浮點數的形式
-
編碼 0.1001000的浮點數是規格化;
-
編碼 1.0000100的浮點數也是規格化;
-
編碼0.1001000的浮點數是規格化;
-
編碼1.1000100的浮點數也是規格化;
-
尾數采用原碼表示時,尾數最高數值為1。如:8位尾數,
-
尾數采用補碼表示時,尾數符號和最高數值位一般應為01或10的形式。如:8位尾數,
-
注意一種特例:當尾數補碼表示,尾數值是-0.5時,其對應的補碼為1.1000000,不是01或10的形式,也滿足規格化要求。
-
規格化處理
方法:對尾數進行移位,直到滿足上述規格化要求。尾數每左移一位,階碼減1;尾數右移一位,階碼加1。
- 若尾數原碼表示,
- N的浮點格式為0011 10010100
- 規格化后N的浮點格式:0001 11010000
- 若尾數補碼表示,
- N的浮點格式為0011 11101100
- 規格化后N的浮點格式為:0001 10110000
浮點格式—IEEE754浮點格式
-
為了便于軟件的移植,1985年IEEE(Institute of Electrical and Electronics Engineers)制定了IEEE754浮點格式標準。
-
IEEE754浮點格式:
-
階碼E移碼表示 (-3+127) = 124 = 0111 1100
-
尾數原碼表示,且尾數整數部分為1,缺省存儲
-
真值為:
- IEEE754規定了三種浮點數的格式:單精度、雙精度和擴展精度。
- C語言中float和double型數據為IEEE754存儲格式
單精度浮點數格式:
雙精度浮點數格式:
說明:階碼為全0和全1規定表示一些特殊的數值:
- E為0,且M為0時,表示機器0;
- E為全1,且M為0時,表示±∞;
- 若E為全0,而M為非0,IEEE754認為是非規格化數;
- 若E為全1,而M為非0,IEEE754認為是NaN(Not a Number非數值)數據。
- IEEE754規格化普通數:M非0,階碼E的值在1
254(或12046)之間,對應的實際指數值為-126+127(或-1022+1023)。
十進制數串的表示
十進制數有兩種存儲和處理形式:字符串和壓縮的十進制數串。
1.字符串形式
- 把十進制數串當作一個字符串,每一個十進制數位及其正、負符號都用相應的ASCII碼表示,各占一個字節,連續存放。
- 例如,數-352字符串存儲形式:
*造成存儲空間的浪費,數據處理不便,一般用于非數值計算的應用領域中。
2.壓縮的十進制數串形式
-
一個字節存放兩位十進制數的BCD碼,常采用8421碼。
-
符號也用4位二進制編碼表示,存放在最低數值位之后。
例如,-2648的的壓縮十進制數串表示為:
節省存儲空間,便于算術運算,廣泛采用。
【知識拓展】 BCD碼
用4位二進制數表示一位十進制數的編碼稱為BCD碼(Binary Code Decimal)。
從4位二進制的16個編碼中選取10個編碼表示十進制的10個數碼,方法可以有很多種。常用的有8421碼、2421碼、余3碼、Gray(格雷)碼等。
-
C語言
+關注
關注
180文章
7605瀏覽量
136904 -
數字電路
+關注
關注
193文章
1606瀏覽量
80639 -
BCD碼
+關注
關注
1文章
52瀏覽量
18305
發布評論請先 登錄
相關推薦
評論