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