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