第2章數(shù)據(jù)的機(jī)器級(jí)表示_第1頁
第2章數(shù)據(jù)的機(jī)器級(jí)表示_第2頁
第2章數(shù)據(jù)的機(jī)器級(jí)表示_第3頁
第2章數(shù)據(jù)的機(jī)器級(jí)表示_第4頁
第2章數(shù)據(jù)的機(jī)器級(jí)表示_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Ch2:DataRepresentation

數(shù)據(jù)的機(jī)器級(jí)表示第一講

數(shù)值數(shù)據(jù)的表示

第二講非數(shù)值數(shù)據(jù)表示及數(shù)據(jù)的寬度、存儲(chǔ)排列、糾/檢錯(cuò)第一講:數(shù)值數(shù)據(jù)的表示主要內(nèi)容定點(diǎn)數(shù)的表示進(jìn)位計(jì)數(shù)制定點(diǎn)數(shù)的二進(jìn)制編碼原碼、補(bǔ)碼、移碼表示定點(diǎn)整數(shù)的表示無符號(hào)整數(shù)、帶符號(hào)整數(shù)浮點(diǎn)數(shù)格式和表示范圍浮點(diǎn)數(shù)的規(guī)格化IEEE754浮點(diǎn)數(shù)標(biāo)準(zhǔn)單精度浮點(diǎn)數(shù)、雙精度浮點(diǎn)數(shù)特殊數(shù)的表示形式C語言程序中的整數(shù)類型、浮點(diǎn)數(shù)類型十進(jìn)制數(shù)表示信息的二進(jìn)制編碼計(jì)算機(jī)的外部信息與內(nèi)部機(jī)器級(jí)數(shù)據(jù)

機(jī)器級(jí)數(shù)據(jù)分兩大類:數(shù)值數(shù)據(jù):無符號(hào)整數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)(實(shí)數(shù))、十進(jìn)制數(shù)非數(shù)值數(shù)據(jù):邏輯數(shù)(包括位串)、西文字符和漢字計(jì)算機(jī)內(nèi)部所有信息都用二進(jìn)制(即:0和1)進(jìn)行編碼用二進(jìn)制編碼的原因:制造二個(gè)穩(wěn)定態(tài)的物理器件容易二進(jìn)制編碼、計(jì)數(shù)、運(yùn)算規(guī)則簡(jiǎn)單正好與邏輯命題對(duì)應(yīng),便于邏輯運(yùn)算,并可方便地用邏輯電路實(shí)現(xiàn)算術(shù)運(yùn)算真值和機(jī)器數(shù)機(jī)器數(shù):用0和1編碼的計(jì)算機(jī)內(nèi)部的0/1序列真值:機(jī)器數(shù)真正的值,即:現(xiàn)實(shí)中帶正負(fù)號(hào)的數(shù)首先考慮數(shù)值數(shù)據(jù)的表示C語言中哪些類型是數(shù)值數(shù)據(jù)?哪些是非…?BACKP.26圖2.1數(shù)值數(shù)據(jù)的表示數(shù)值數(shù)據(jù)表示的三要素進(jìn)位計(jì)數(shù)制定、浮點(diǎn)表示如何用二進(jìn)制編碼即:要確定一個(gè)數(shù)值數(shù)據(jù)的值必須先確定這三個(gè)要素。例如,機(jī)器數(shù)01011001的值是多少?進(jìn)位計(jì)數(shù)制十進(jìn)制、二進(jìn)制、十六進(jìn)制、八進(jìn)制數(shù)及其相互轉(zhuǎn)換定/浮點(diǎn)表示(解決小數(shù)點(diǎn)問題)定點(diǎn)整數(shù)、定點(diǎn)小數(shù)浮點(diǎn)數(shù)(可用一個(gè)定點(diǎn)小數(shù)和一個(gè)定點(diǎn)整數(shù)來表示)定點(diǎn)數(shù)的編碼(解決正負(fù)號(hào)問題)原碼、補(bǔ)碼、反碼、移碼(反碼很少用)答案是:不知道!SignandMagnitude(原碼的表示)BinaryDecimal0123456700000001001000110100010101100111

容易理解,但是:0的表示不唯一,故不利于程序員編程

加、減運(yùn)算方式不統(tǒng)一

需額外對(duì)符號(hào)位進(jìn)行處理,故不利于硬件設(shè)計(jì)

特別當(dāng)a<b時(shí),實(shí)現(xiàn)a-b比較困難從50年代開始,整數(shù)都采用補(bǔ)碼來表示但浮點(diǎn)數(shù)的尾數(shù)用原碼定點(diǎn)小數(shù)表示BinaryDecimal-0-1-2-3-4-5-6-710001001101010111100110111101111補(bǔ)碼特性-模運(yùn)算(modular運(yùn)算)時(shí)鐘是一種模12系統(tǒng)假定鐘表時(shí)針指向10點(diǎn),要將它撥向6點(diǎn),則有兩種撥法:①倒撥4格:10-4=6②順撥8格:10+8=18≡6(mod12)模12系統(tǒng)中:10-4≡10+8(mod12)-4≡8(mod12)

則,稱8是-4對(duì)模12的補(bǔ)碼(即:-4的模12補(bǔ)碼等于8)。同樣有-3≡9(mod12)-5≡7(mod12)等結(jié)論2:對(duì)于某一確定的模,某數(shù)減去小于模的另一數(shù),總可以用該數(shù)加上另一數(shù)負(fù)數(shù)的補(bǔ)碼來代替。補(bǔ)碼(modular運(yùn)算):+和–的統(tǒng)一

重要概念:在一個(gè)模運(yùn)算系統(tǒng)中,一個(gè)數(shù)與它除以“模”后的余數(shù)等價(jià)。結(jié)論1:一個(gè)負(fù)數(shù)的補(bǔ)碼等于模減該負(fù)數(shù)的絕對(duì)值。模運(yùn)算系統(tǒng)舉例例1:“鐘表”模運(yùn)算系統(tǒng)假定時(shí)針只能順撥,從10點(diǎn)倒撥4格后是幾點(diǎn)?10-4=10+(12-4)=10+8=6(mod12)例2:“4位十進(jìn)制數(shù)”模運(yùn)算系統(tǒng)假定算盤只有四檔,且只能做加法,則在算盤上計(jì)算9828-1928等于多少?9828-1928=9828+(104-1928)=9828+8072=17900 =7900(mod104)取模即只留余數(shù),高位“1”被丟棄!相當(dāng)于只有低4位留在算盤上。運(yùn)算器是一個(gè)模運(yùn)算系統(tǒng),適合用補(bǔ)碼表示和運(yùn)算0000000110000010010011101111011101011010101111001101001101101001計(jì)算機(jī)中運(yùn)算器只有有限位。假定為n位,則運(yùn)算結(jié)果只能保留低n位,故可看成是個(gè)只有n檔的二進(jìn)制算盤。所以,其模為2n。當(dāng)n=4時(shí),共有16個(gè)機(jī)器數(shù):0000~1111,可看成是模為24的鐘表系統(tǒng)。真值的范圍為-8~+7補(bǔ)碼的定義假定補(bǔ)碼有n位,則:定點(diǎn)整數(shù):[X]補(bǔ)=2n+X(-2n-1≤X<2n-1

,mod2n)定點(diǎn)小數(shù):[X]補(bǔ)=2+X(-1≤X<1,mod2)注:實(shí)際上在計(jì)算機(jī)中并不使用定點(diǎn)小數(shù)表示!不需要掌握這個(gè)知識(shí)點(diǎn)。求特殊數(shù)的補(bǔ)碼②[-1]補(bǔ)=2n-0…01=11…1(n個(gè)1)(mod2n)假定機(jī)器數(shù)有n位①[-2n-1]補(bǔ)=2n-2n-1=10…0(n-1個(gè)0)(mod2n)③[-1.0]補(bǔ)=2-1.0

=1.00…0(n-1個(gè)0)(mod2)④[+0]補(bǔ)=[-0]補(bǔ)=00…0(n個(gè)0)

注:計(jì)算機(jī)中并不會(huì)出現(xiàn)-1.0的補(bǔ)碼,這里只是想說明同一個(gè)真值在機(jī)器中可能有不同的機(jī)器數(shù)!補(bǔ)碼與真值之間的簡(jiǎn)便轉(zhuǎn)換例:設(shè)機(jī)器數(shù)有8位,求123和-123的補(bǔ)碼表示。解:123=127-4=01111111B-100B=01111011B[01111011]補(bǔ)=28+01111011=100000000+01111011

=01111011(mod28),即7BH。-123=-01111011B

[-01111011]補(bǔ)=28–01111011=100000000-01111011=11111111–01111011+1=10000100+1

=10000101,即85H。如何快速得到123的二進(jìn)制表示?各位取反,末位加1Two’sComplement(補(bǔ)碼的表示)正數(shù):符號(hào)位(signbit)為0,數(shù)值部分不變負(fù)數(shù):符號(hào)位為1,數(shù)值部分“各位取反,末位加1”+0和-0表示唯一變形(模4)補(bǔ)碼:雙符號(hào),用于存放可溢出的中間結(jié)果。值太大,用4位補(bǔ)碼無法表示,故“溢出”!但用變形補(bǔ)碼可保留符號(hào)位和最高數(shù)值位。BitwiseInverse111111101101110010111010100110000111Decimal012345678補(bǔ)碼000000010010001101000101011001111000Decimal-0-1-2-3-4-5-6-7-8補(bǔ)碼000011111110110111001011101010011000變形補(bǔ)碼000000000100010000110010000101001100011101000變形補(bǔ)碼000001111111110111011110011011110101100111000如何求補(bǔ)碼的真值根據(jù)補(bǔ)碼各位上的“權(quán)”,可以求出一個(gè)補(bǔ)碼的值真值范圍:

令:[A]補(bǔ)=an-1an-2……

a1a0則:A=-an-1.2n-1+an-2.2n-2+

……

a1.21+

a0.20

符號(hào)為0,則為正數(shù),數(shù)值部分同符號(hào)為1,則為負(fù)數(shù),數(shù)值各位取反,末位加1例如:補(bǔ)碼“11010110”的真值為:-0101010=-(32+8+2)=-42Excess(biased)notion-移碼表示°什么是“excess(biased)notation-移碼表示”?

將每一個(gè)數(shù)值加上一個(gè)偏置常數(shù)(Excess/bias)°一般來說,當(dāng)編碼位數(shù)為n時(shí),bias取2n-1Ex.n=4:Ebiased=E+23(

bias=23=1000B)-8(+8)~0000B-7(+8)~0001B… 0(+8)~1000B …+7(+8)~1111B°為什么要用移碼來表示指數(shù)(階碼)?

便于浮點(diǎn)數(shù)加減運(yùn)算時(shí)的對(duì)階操作(比較大小)例:1.01x2-1+1.11x23簡(jiǎn)化比較補(bǔ)碼:111<011?(-1)

(3)1.01x2-1+4+1.11x23+4

移碼:011<111

(3)

(7)移碼主要用來表示浮點(diǎn)數(shù)階碼!0的移碼表示唯一移碼和補(bǔ)碼僅第一位不同Unsignedinteger(無符號(hào)整數(shù))機(jī)器中字的位排列順序有兩種方式:(例:32位字:0…010112)高到低位從左到右:00000000000000000000000000001011高到低位從右到左:11010000000000000000000000000000Leftmost和rightmost這兩個(gè)詞有歧義,故用LSB(LeastSignificantBit)來表示最低有效位,用MSB來表示最高有效位高位到低位多采用從左往右排列一般在全部是正數(shù)運(yùn)算且不出現(xiàn)負(fù)值結(jié)果的場(chǎng)合下,可使用無符號(hào)數(shù)表示。例如,地址運(yùn)算,編號(hào)表示,等等無符號(hào)數(shù)的編碼中沒有符號(hào)位能表示的最大值大于位數(shù)相同的帶符號(hào)整數(shù)的最大值(Why?)例如,8位無符號(hào)整數(shù)最大是255(11111111)而8位帶符號(hào)整數(shù)最大為127(01111111)總是整數(shù),所以很多時(shí)候就簡(jiǎn)稱為“無符號(hào)數(shù)”MSBLSBSignedinteger(帶符號(hào)整數(shù),定點(diǎn)整數(shù))計(jì)算機(jī)必須能處理正數(shù)(positive)和負(fù)數(shù)(negative),MSB表示數(shù)符有三種定點(diǎn)編碼方式Signedmagnitude(原碼)

現(xiàn)用來表示浮點(diǎn)(實(shí))數(shù)的尾數(shù)One’scomplement(反碼)現(xiàn)已不用于表示數(shù)值數(shù)據(jù)Two’scomplement(補(bǔ)碼)

50年代以來,所有計(jì)算機(jī)都用補(bǔ)碼來表示定點(diǎn)整數(shù)為什么用補(bǔ)碼表示帶符號(hào)整數(shù)?補(bǔ)碼運(yùn)算系統(tǒng)是模運(yùn)算系統(tǒng),加、減運(yùn)算統(tǒng)一數(shù)0的表示唯一,方便使用比原碼和反碼多表示一個(gè)最小負(fù)數(shù)與移碼相比,其符號(hào)位和真值的符號(hào)對(duì)應(yīng)關(guān)系清楚帶符號(hào)整數(shù)和無符號(hào)數(shù)的比較擴(kuò)充操作有差別例如,MIPS提供了兩種加載指令(loadbyteunsigned/loadbyte)無符號(hào)數(shù):lbu$t0,0($s0);$t0高24位補(bǔ)0(稱為0擴(kuò)展)帶符號(hào)整數(shù):lb$t0,0($s0);$t0高24位補(bǔ)符(稱為符號(hào)擴(kuò)展)數(shù)的比較有差異無符號(hào)數(shù):MSB為1的數(shù)比MSB為0的數(shù)大帶符號(hào)整數(shù):MSB為1的數(shù)比MSB為0的數(shù)小例如,MIPS中提供了不同的比較指令,如:無符號(hào)數(shù):sltu$t0,$s0,$s1(setlessthanunsigned)帶符號(hào)整數(shù):slt$t1,$s0,$s1(setlessthan)

假定:$s0=11111111111111111111111111111111 $s1=00000000000000000000000000000001則:$t0和$t1分別為多少?

答案:$t0和$t1分別為0和1。溢出判斷有差異(無符號(hào)數(shù)根據(jù)最高位是否有進(jìn)位判斷溢出,通常不判)MIPS規(guī)定:無符號(hào)數(shù)運(yùn)算溢出時(shí),不產(chǎn)生“溢出異?!盨KIP擴(kuò)展操作舉例例1(擴(kuò)展操作):在32位機(jī)器上輸出si,usi,i,ui的十進(jìn)制(真值)和十六進(jìn)制值(機(jī)器數(shù))是什么? shortsi=-32768; unsignedshortusi=si; inti=si; unsingnedui=usi;si=-327688000usi=327688000i=-32768FFFF8000ui=3276800008000BACK機(jī)器數(shù)真值提示:32768=215=1000000000000000B現(xiàn)象:帶符號(hào)整數(shù):符號(hào)擴(kuò)展無符號(hào)數(shù):0擴(kuò)展C語言程序中的整數(shù)關(guān)系表達(dá)式運(yùn)算類型結(jié)果說明0==0U-1<0-1<0U2147483647>-2147483647-12147483647U>-2147483647-12147483647>(int)2147483648U-1>-2(unsigned)-1>-2無符號(hào)數(shù):unsignedint(short/long);帶符號(hào)整數(shù):int(short/long)常在一個(gè)數(shù)的后面加一個(gè)“u”或“U”表示無符號(hào)數(shù)若同時(shí)有無符號(hào)和帶符號(hào)整數(shù),則C編譯器將帶符號(hào)整數(shù)強(qiáng)制轉(zhuǎn)換為無符號(hào)數(shù)假定以下關(guān)系表達(dá)式在32位用補(bǔ)碼表示的機(jī)器上執(zhí)行,結(jié)果是什么?C語言程序中的整數(shù)關(guān)系表達(dá)式類型結(jié)果說明0==0U-1<0-1<0U2147483647>-2147483647-12147483647U>-2147483647-12147483647>(int)2147483648U-1>-2(unsigned)-1>-2無帶無帶無帶帶無11

0*1

0*

1*1100…0B=00…0B11…1B(-1)<00…0B(0)11…1B(232-1)>00…0B(0)011…1B(231-1)>100…0B(-231)011…1B(231-1)<100…0B(231)011…1B(231-1)>100…0B(-231)11…1B(-1)>11…10B(-2)11…1B(232-1)>11…10B(232-2)帶*的結(jié)果與常規(guī)預(yù)想的相反!Example:

mantissa(尾數(shù))exponent(階碼、指數(shù))

6.02x1021

decimalpoint

radix(base,基)°Normalizedform(規(guī)格化形式):小數(shù)點(diǎn)前只有一位非0數(shù)°同一個(gè)數(shù)有多種表示形式。例:對(duì)于數(shù)1/1,000,000,000?Normalized(唯一的規(guī)格化形式):1.0x10-9?Unnormalized(非規(guī)格化形式不唯一):0.1x10-8,10.0x10-10科學(xué)計(jì)數(shù)法(ScientificNotation)與浮點(diǎn)數(shù)

mantissa(尾數(shù))exponent(指數(shù))0.101two

x

2

-10

binarypoint基為2forBinaryNumbers:只要對(duì)尾數(shù)和指數(shù)分別編碼,就可表示一個(gè)浮點(diǎn)數(shù)(即:實(shí)數(shù))浮點(diǎn)數(shù)(FloatingPoint)的表示范圍例:畫出下述32位浮點(diǎn)數(shù)格式的規(guī)格化數(shù)的表示范圍。

018931

第0位數(shù)符S;第1~8位為8位移碼表示階碼E(偏置常數(shù)為128);第9~31位為24位二進(jìn)制原碼小數(shù)表示的尾數(shù)M。規(guī)格化尾數(shù)的小數(shù)點(diǎn)后第一位總是1,故規(guī)定第一位默認(rèn)的“1”不明顯表示出來。這樣可用23個(gè)數(shù)位表示24位尾數(shù)。S階碼E尾數(shù)M最大正數(shù):0.11…1x211…1=(1-2-24)x2127

最小正數(shù):0.10…0x200…0=(1/2)x2-128

因?yàn)樵a是對(duì)稱的,所以其表示范圍關(guān)于原點(diǎn)對(duì)稱。機(jī)器0:尾數(shù)為0或落在下溢區(qū)中的數(shù)浮點(diǎn)數(shù)范圍比定點(diǎn)數(shù)大,但數(shù)的個(gè)數(shù)沒變多,故數(shù)之間更稀疏,且不均勻

正下溢

負(fù)下溢

-

(1-2-24)

×2127

數(shù)軸

可表示的正數(shù)

可表示的負(fù)數(shù)

-2-129

0

2-129

(1-2-24)

×2127

正上溢

負(fù)上溢

+/-0.1xxxxx

×2E浮點(diǎn)數(shù)的表示°Normalformat(規(guī)格化數(shù)形式):

+/-1.xxxxxxxxxx

×2Exponent°32-bit規(guī)格化數(shù):310

S

Exponent

Significand1bit?bits?bits

S

是符號(hào)位(Sign)

Exponent用移碼(增碼)來表示Significand表示xxxxxxxxxxxxx,尾數(shù)部分

(基可以是2/4/8/16,約定信息,無需顯式表示)°早期的計(jì)算機(jī),各自定義自己的浮點(diǎn)數(shù)格式問題:浮點(diǎn)數(shù)表示不統(tǒng)一會(huì)帶來什么問題?規(guī)定:小數(shù)點(diǎn)前總是“1”,故可隱含表示注意:和前面例子的規(guī)定不太一樣,顯然這里更合理!“Father”oftheIEEE754standard現(xiàn)在所有計(jì)算機(jī)都采用IEEE754來表示浮點(diǎn)數(shù)1970年代后期,IEEE成立委員會(huì)著手制定浮點(diǎn)數(shù)標(biāo)準(zhǔn)1985年完成浮點(diǎn)數(shù)標(biāo)準(zhǔn)IEEE754的制定Prof.WilliamKahan

/~wkahan/ieee754status/754story.htmlThisstandardwasprimarilytheworkofoneperson,UCBerkeleymathprofessorWilliamKahan.

直到80年代初,各個(gè)機(jī)器內(nèi)部的浮點(diǎn)數(shù)表示格式還沒有統(tǒng)一

因而相互不兼容,機(jī)器之間傳送數(shù)據(jù)時(shí),帶來麻煩

IEEE754FloatingPointStandard

SinglePrecision:(DoublePrecisionissimilar) S

Exponent

Significand

1bit8bits23bits°Signbit:1表示negative;0表示positive°Significand(尾數(shù)):?規(guī)格化尾數(shù)最高位總是1,所以隱含表示,省1位?1+23bits(single),1+52bits(double)°Exponent(階碼/指數(shù)):SP規(guī)格化數(shù)階碼范圍為00000001(-126)~11111110(127)bias為127(single),1023(double)SP:(-1)Sx(1+Significand)x2(Exponent-127)DP:(-1)Sx(1+Significand)x2(Exponent-1023)全0和全1用來表示特殊值!為什么用127?若用128,則階碼范圍為多少?00000001(-127)~11111110(126)規(guī)格化數(shù):+/-1.xxxxxxxxxxtwox2ExponentEx:ConvertingBinaryFPtoDecimal10111110111000000000000000000000°Sign:1=>negative°Exponent:?01111101two=125ten?Biasadjustment:125-127=-2°Significand:

1+1x2-1+1x2-2+0x2-3+0x2-4+0x2-5+...=1+2-1+2-2=1+0.5+0.25=1.75°Represents:-1.75tenx2-2=-0.4375(-1)S

x(1+Significand)x2(Exponent-127)BEE00000H

isthehex.Rep.OfanIEEE754SPFPnumberEx:ConvertingDecimaltoFP-12.751.Denormalize:-12.752.Convertintegerpart:12=8+4=110023.Convertfractionalpart:.75=.5+.25=.1124.Putpartstogetherandnormalize:1100.11=1.10011x235.Convertexponent:127+3=128+2=10000010211000001010011000000000000000000TheHexrep.isC14C0000HNormalizednumbers(規(guī)格化數(shù))ExponentSignificandObject1-254anythingNormsimplicitleading100?0nonzero?2550?255nonzero?前面的定義都是針對(duì)規(guī)格化數(shù)(normalizedform)Howaboutotherpatterns?Representationfor0Howtorepresent0?

exponent:allzeros

significand:allzeros

Whataboutsign?Bothcasesvalid.+0:00000000000000000000000000000000-0:10000000000000000000000000000000Representationfor+∞/-∞

Howtorepresent+∞/-∞??Exponent:

allones(11111111B=255)?Significand:allzeros

+∞:01111111100000000000000000000000-∞:11111111100000000000000000000000Operations5.0/0=+∞,-5.0/0=-∞5+(+∞)=+∞,(+∞)+(+∞)=+∞5-(+∞)=-∞,(-∞)-(+∞)=-∞etc為什么要這樣處理??可以利用+∞/-∞作比較。例如:X/0>Y可作為有效比較InFP,除數(shù)為0的結(jié)果是+/-∞,不是溢出異常.(整數(shù)除0為異常)∞:infinityRepresentationfor“NotaNumber”Sqrt(-4.0)=?0/0=?CalledNotaNumber(NaN)-“非數(shù)”O(jiān)perations

sqrt(-4.0)=NaN0/0=NaNop(NaN,x)=NaN+∞+(-∞)=NaN+∞-(+∞)=NaN∞/∞=NaNetc.HowtorepresentNaN

Exponent=255

Significand:nonzeroNaNscanhelpwithdebuggingWhathavewedefinedsofar?(forSP)RepresentationforDenorms(非規(guī)格化數(shù))

UsedtorepresentDenormalizednumbersExponentSignificandObject00+/-00nonzeroDenorms

1-254anythingNormsimplicitleading12550+/-infinity255nonzeroNaNRepresentationforDenorms2-1262-1252-1242-1231.0…0x2-126~1.1…1x2-1260.0…0x2-126~0.1…1x2-1262-1262-1252-1242-12300GAP

NormalizednumbersDenorms(-1)s×0.aa…a×2-126QuestionsaboutIEEE754What’stherangeofrepresentablevalues?Thelargestnumberforsingle:+1.11…1X2127Howaboutdouble?Whataboutfollowingtypeconverting:notalwaystrue!

if(i==(int)((float)i)){printf(“true”);}if(f==(float)((int)f)){printf(“true”);}HowaboutFPaddassociative?FALSE!

x=–1.5x1038,y=1.5x1038,z=1.0(x+y)+z=(–1.5x1038+1.5x1038)

+1.0=1.0x+(y+z)=–1.5x1038+(1.5x1038+1.0)=0.0Howaboutdouble?

Howaboutdouble?True!Notalwaystrue!約+3.4X1038約+1.8X10308數(shù)值數(shù)據(jù)(numericaldata)的兩種表示Binary(二進(jìn)制數(shù))定點(diǎn)整數(shù):Fixed-pointnumber(integer)Unsignedandsignedint浮點(diǎn)數(shù):Floating-pointnumber(realnumber)Decimal(十進(jìn)制數(shù))

用ASCII碼表示用BCD(BinarycodedDecimal)碼表示計(jì)算機(jī)中為什么要用十進(jìn)制數(shù)表示數(shù)值?日常使用的都是十進(jìn)制數(shù),所以,計(jì)算機(jī)外部都使用十進(jìn)制數(shù)。在一些有大量數(shù)據(jù)輸入/出的系統(tǒng)中,為減少二進(jìn)制數(shù)和十進(jìn)制數(shù)之間的轉(zhuǎn)換,在計(jì)算機(jī)內(nèi)部直接用十進(jìn)制數(shù)表示數(shù)值。

十進(jìn)制數(shù)的表示用ASCII碼表示十進(jìn)制數(shù)前分隔數(shù)字串符號(hào)位單獨(dú)用一個(gè)字節(jié)表示,位于數(shù)字串之前。正號(hào)用“+”的ASCII碼(2BH)表示;負(fù)號(hào)用“-”的ASCII碼(2DH)表示例:十進(jìn)制數(shù)+236表示為:2B323336H

00101011001100100011001100110110B十進(jìn)制數(shù)-2369表示為:2D32333639H

0010110100110010001100110011011000111001B后嵌入數(shù)字串符號(hào)位嵌入最低位數(shù)字的ASCII碼高4位中。比前分隔方式省一個(gè)字節(jié)。正數(shù)不變;負(fù)數(shù)高4位變?yōu)?111.例:十進(jìn)制數(shù)+236表示為:323336H

001100100011001100110110B十進(jìn)制數(shù)-2369表示為:32333679H00110010001100110011011001111001B缺點(diǎn):占空間大,且需轉(zhuǎn)換成二進(jìn)制數(shù)或BCD碼才能計(jì)算。編碼思想:每個(gè)十進(jìn)數(shù)位至少有4位二進(jìn)制表示。而4位二進(jìn)制位可組合成16種狀態(tài),去掉10種狀態(tài)后還有6種冗余狀態(tài)。編碼方案1.十進(jìn)制有權(quán)碼每個(gè)十進(jìn)制數(shù)位的4個(gè)二進(jìn)制位(稱為基2碼)都有一個(gè)確定的權(quán)。8421碼是最常用的十進(jìn)制有權(quán)碼。也稱自然BCD(NBCD)碼。2.十進(jìn)制無權(quán)碼每個(gè)十進(jìn)制數(shù)位的4個(gè)基2碼沒有確定的權(quán)。在無權(quán)碼方案中,用的較多的是余3碼和格雷碼。3.其他編碼方案(5中取2碼、獨(dú)熱碼等)符號(hào)位的表示:“+”:1100;“-”:1101例:+236=(1100001000110110)8421(占2個(gè)字節(jié))-2369=(1101

00000010001101101001)8421(占3個(gè)字節(jié))用BCD碼表示十進(jìn)制數(shù)補(bǔ)0以使數(shù)占滿一個(gè)字節(jié)第一講小結(jié)在機(jī)器內(nèi)部編碼后的數(shù)稱為機(jī)器數(shù),其值稱為真值定義數(shù)值數(shù)據(jù)有三個(gè)要素:進(jìn)制、定點(diǎn)/浮點(diǎn)、編碼整數(shù)的表示無符號(hào)數(shù):正整數(shù),用來表示地址等;帶符號(hào)整數(shù):用補(bǔ)碼表示C語言中的整數(shù)無符號(hào)數(shù):unsignedint(short/long);帶符號(hào)數(shù):int(short/long)浮點(diǎn)數(shù)的表示符號(hào);尾數(shù):定點(diǎn)小數(shù);指數(shù)(階):定點(diǎn)整數(shù)(基不用表示)浮點(diǎn)數(shù)的范圍正上溢、正下溢、負(fù)上溢、負(fù)下溢;與階碼的位數(shù)和基的大小有關(guān)浮點(diǎn)數(shù)的精度:與尾數(shù)的位數(shù)和是否規(guī)格化有關(guān)浮點(diǎn)數(shù)的表示(IEEE754標(biāo)準(zhǔn)):?jiǎn)尉萐P(float)和雙精度DP(double)規(guī)格化數(shù)(SP):階碼1~254,尾數(shù)最高位隱含為1“零”(階為全0,尾為全0)∞(階為全1,尾為全0)NaN(階為全1,尾為非0)非規(guī)格化數(shù)(階為全0,尾為非0,隱藏位為0)(P.42倒數(shù)第9行說明)十進(jìn)制數(shù)的表示:用ASCII碼或BCD碼表示10在計(jì)算機(jī)中有幾種可能的表示?

-10呢?“轉(zhuǎn)換”的概念在數(shù)據(jù)表示中的反映感覺媒體信息樹、鏈表等結(jié)構(gòu)化數(shù)據(jù)描述程序定義的int、float等數(shù)據(jù)指令中的寄存器或內(nèi)存中數(shù)據(jù)ALU或總線上的運(yùn)算/傳輸數(shù)據(jù)邏輯門位信息問題(應(yīng)用)算法程序(語言)指令集體系結(jié)構(gòu)(ISA)微結(jié)構(gòu)電路器件(晶體管)具體實(shí)現(xiàn)抽象概括第二講非數(shù)值數(shù)據(jù)、數(shù)據(jù)排列、糾/檢錯(cuò)主要內(nèi)容非數(shù)值數(shù)據(jù)的表示邏輯數(shù)據(jù)、西文字符、漢字?jǐn)?shù)據(jù)的寬度數(shù)據(jù)的存儲(chǔ)排列大端方式、小端方式數(shù)據(jù)的糾錯(cuò)和檢錯(cuò)奇偶校驗(yàn)、海明校驗(yàn)、循環(huán)冗余校驗(yàn)表示用一位表示。例如,真:1/假:0N位二進(jìn)制數(shù)可表示N個(gè)邏輯數(shù)據(jù),或一個(gè)位串運(yùn)算按位進(jìn)行如:按位與/按位或/邏輯左移/邏輯右移等識(shí)別邏輯數(shù)據(jù)和數(shù)值數(shù)據(jù)在形式上并無差別,也是一串0/1序列,機(jī)器靠指令來識(shí)別。位串用來表示若干個(gè)狀態(tài)位或控制位(OS中使用較多)

例如,x86的標(biāo)志寄存器含義如下:

邏輯數(shù)據(jù)的編碼表示CFPFAFZFSFTFIFDFOF特點(diǎn)是一種拼音文字,用有限幾個(gè)字母可拼寫出所有單詞只對(duì)有限個(gè)字母和數(shù)學(xué)符號(hào)、標(biāo)點(diǎn)符號(hào)等輔助字符編碼所有字符總數(shù)不超過256個(gè),使用7或8個(gè)二進(jìn)位可表示表示(常用編碼為7位ASCII碼)十進(jìn)制數(shù)字:0/1/2…/9英文字母:A/B/…/Z/a/b/…/z專用符號(hào):+/-/%/*/&/……控制字符(不可打印或顯示)操作字符串操作,如:傳送/比較等

西文字符的編碼表示必須熟悉對(duì)應(yīng)的ASCII碼!特點(diǎn)漢字是表意文字,一個(gè)字就是一個(gè)方塊圖形。漢字?jǐn)?shù)量巨大,總數(shù)超過6萬字,給漢字在計(jì)算機(jī)內(nèi)部的表示、漢字的傳輸與交換、漢字的輸入和輸出等帶來了一系列問題。編碼形式有以下幾種漢字代碼:輸入碼:對(duì)漢字用相應(yīng)按鍵進(jìn)行編碼表示,用于輸入內(nèi)碼:用于在系統(tǒng)中進(jìn)行存儲(chǔ)、查找、傳送等處理字模點(diǎn)陣或輪廓描述:

描述漢字字模點(diǎn)陣或輪廓,用于顯示/打印

漢字及國(guó)際字符的編碼表示問題:西文字符有沒有輸入碼?有沒有內(nèi)碼?有沒有字模點(diǎn)陣或輪廓描述?向計(jì)算機(jī)輸入漢字的方式:

①手寫漢字聯(lián)機(jī)識(shí)別輸入,或者是印刷漢字掃描輸入后自動(dòng)識(shí)別,這兩種方法現(xiàn)均已達(dá)到實(shí)用水平。②用語音輸入漢字,雖然簡(jiǎn)單易操作,但離實(shí)用階段還相差很遠(yuǎn)。③利用英文鍵盤輸入漢字:每個(gè)漢字用一個(gè)或幾個(gè)鍵表示,這種對(duì)每個(gè)漢字用相應(yīng)按鍵進(jìn)行的編碼稱為漢字“輸入碼”,又稱外碼。輸入碼的碼元為按鍵。是最簡(jiǎn)便、最廣泛的漢字輸入方法。

常用的方法有:搜狗拼音、五筆字型、智能ABC、微軟拼音等使用漢字輸入碼的原因:

①鍵盤面向西文設(shè)計(jì),一個(gè)或兩個(gè)西文字符對(duì)應(yīng)一個(gè)按鍵,非常方便。②漢字是大字符集,專門的漢字輸入鍵盤由于鍵多、查找不便、成本高等原因而幾乎無法采用。漢字的輸入碼問題:西文字符常用的內(nèi)碼是什么?對(duì)于漢字內(nèi)碼的選擇,必須考慮以下幾個(gè)因素:①不能有二義性,即不能和ASCII碼有相同的編碼。②盡量與漢字在字庫中的位置有關(guān),便于漢字查找和處理。③編碼應(yīng)盡量短。國(guó)標(biāo)碼(國(guó)標(biāo)交換碼)1981年我國(guó)頒布了《信息交換用漢字編碼字符集·基本集》(GB2312—80)。該標(biāo)準(zhǔn)選出6763個(gè)常用漢字,為每個(gè)漢字規(guī)定了標(biāo)準(zhǔn)代碼,以供漢字信息在不同計(jì)算機(jī)系統(tǒng)間交換使用可在漢字國(guó)標(biāo)碼的基礎(chǔ)上產(chǎn)生漢字機(jī)內(nèi)碼字符集與漢字的內(nèi)碼其內(nèi)碼就是ASCII碼。由三部分組成:①字母、數(shù)字和各種符號(hào),包括英文、俄文、日文平假名與片假名、羅馬字母、漢語拼音等共687個(gè)②一級(jí)常用漢字,共3755個(gè),按漢語拼音排列③二級(jí)常用漢字,共3008個(gè),不太常用,按偏旁部首排列漢字的區(qū)位碼碼表由94行、94列組成,行號(hào)為區(qū)號(hào),列號(hào)為位號(hào),各占7位指出漢字在碼表中的位置,共14位,區(qū)號(hào)在左、位號(hào)在右漢字的國(guó)標(biāo)碼每個(gè)漢字的區(qū)號(hào)和位號(hào)各自加上32(20H),得到其“國(guó)標(biāo)碼”國(guó)標(biāo)碼中區(qū)號(hào)和位號(hào)各占7位。在計(jì)算機(jī)內(nèi)部,為方便處理與存儲(chǔ),前面添一個(gè)0,構(gòu)成一個(gè)字節(jié)GB2312-80字符集漢字內(nèi)碼至少需2個(gè)字節(jié)才能表示一個(gè)漢字內(nèi)碼。為什么?由漢字的總數(shù)決定!可在GB2312國(guó)標(biāo)碼的基礎(chǔ)上產(chǎn)生漢字內(nèi)碼為與ASCII碼區(qū)別,將國(guó)標(biāo)碼的兩個(gè)字節(jié)的第一位置“1”后得到一種漢字內(nèi)碼

例如,漢字“大”在碼表中位于第20行、第83列。因此區(qū)位碼為00101001010011,國(guó)標(biāo)碼為0011010001110011,即3473H。前面的34H和字符“4”的ACSII碼相同,后面的73H和字符“s”的ACSII碼相同,將每個(gè)字節(jié)的最高位各設(shè)為“1”后,就得到其內(nèi)碼:B4F3H(1011010011110011B),因而不會(huì)和ASCII碼混淆。區(qū)位碼→國(guó)標(biāo)碼→內(nèi)碼國(guó)際字符集國(guó)際字符集的必要性不同地區(qū)使用不同字符集內(nèi)碼,如中文GB2312

/

Big5、日文Shift-JIS

/

EUC-JP等。在安裝中文系統(tǒng)的計(jì)算機(jī)中打開日文文件,會(huì)出現(xiàn)亂碼。為使所有國(guó)際字符都能互換,必須創(chuàng)建一種涵蓋全部字符的多字符集。國(guó)際多字符集通過對(duì)各種地區(qū)性字符集規(guī)定使用范圍來唯一定義各字符的編碼。國(guó)際標(biāo)準(zhǔn)ISO/IEC10646提出了一種包括全世界現(xiàn)代書面語言文字所使用的所有字符的標(biāo)準(zhǔn)編碼,有4個(gè)字節(jié)編碼(UCS-4)和2字節(jié)編碼(UCS-2)。我國(guó)(包括香港、臺(tái)灣地區(qū))與日本、韓國(guó)聯(lián)合制訂了一個(gè)統(tǒng)一的漢字字符集(CJK編碼),共收集了上述不同國(guó)家和地區(qū)共約2萬多漢字及符號(hào),采用2字節(jié)編碼(即:UCS-2),已被批準(zhǔn)為國(guó)家標(biāo)準(zhǔn)(GB13000)。Windows操作系統(tǒng)(中文版)已采用中西文統(tǒng)一編碼,收集了中、日、韓三國(guó)常用的約2萬漢字,稱為“Unicode”,采用2字節(jié)編碼,與UCS-2一致。

為便于打印、顯示漢字,漢字字形必須預(yù)先存在機(jī)內(nèi)字庫(font):所有漢字形狀的描述信息集合不同字體(如宋體、仿宋、楷體、黑體等)對(duì)應(yīng)不同字庫從字庫中找到字形描述信息,然后送設(shè)備輸出問題:如何知道到哪里找相應(yīng)的字形信息?漢字內(nèi)碼與其在字庫中的位置有關(guān)!!字形主要有兩種描述方法:字模點(diǎn)陣描述(圖像方式)輪廓描述(圖形方式)直線向量輪廓曲線輪廓(TrueType字形)漢字的字模點(diǎn)陣碼和輪廓描述區(qū)位碼←國(guó)標(biāo)碼←內(nèi)碼數(shù)據(jù)的基本寬度比特(bit)是計(jì)算機(jī)中處理、存儲(chǔ)、傳輸信息的最小單位二進(jìn)制信息的計(jì)量單位是“字節(jié)”(Byte),也稱“位組”現(xiàn)代計(jì)算機(jī)中,存儲(chǔ)器按字節(jié)編址字節(jié)是最小可尋址單位(addressableunit)

如果以字節(jié)為一個(gè)排列單位,則LSB表示最低有效字節(jié),MSB表示最高有效字節(jié)除比特和字節(jié)外,還經(jīng)常使用“字”(word)作為單位“字”和“字長(zhǎng)”的概念不同IA-32中的“字”有多少位?字長(zhǎng)多少位呢?DWORD:32位QWORD:64位16位32位數(shù)據(jù)的基本寬度“字”和“字長(zhǎng)”的概念不同“字長(zhǎng)”指定點(diǎn)運(yùn)算數(shù)據(jù)通路的寬度。(數(shù)據(jù)通路指CPU內(nèi)部數(shù)據(jù)流經(jīng)的路徑以及路徑上的部件,主要是CPU內(nèi)部進(jìn)行數(shù)據(jù)運(yùn)算、存儲(chǔ)和傳送的部件,這些部件的寬度基本上要一致,才能相互匹配。因此,”字長(zhǎng)”等于CPU內(nèi)部總線的寬度、運(yùn)算器的位數(shù)、通用寄存器的寬度等。)“字”表示被處理信息的單位,用來度量數(shù)據(jù)類型的寬度。字和字長(zhǎng)的寬度可以一樣,也可不同。例如,x86體系結(jié)構(gòu)定義“字”的寬度為16位,但從386開始字長(zhǎng)就是32位了。數(shù)據(jù)量的度量單位存儲(chǔ)二進(jìn)制信息時(shí)的度量單位要比字節(jié)或字大得多容量經(jīng)常使用的單位有:“千字節(jié)”(KB),1KB=210字節(jié)=1024B“兆字節(jié)”(MB),1MB=220字節(jié)=1024KB“千兆字節(jié)”(GB),1GB=230字節(jié)=1024MB“兆兆字節(jié)”(TB),1TB=240字節(jié)=1024GB

通信中的帶寬使用的單位有:“千比特/秒”(kb/s),1kbps=103b/s=1000bps“兆比特/秒”(Mb/s),1Mbps=106b/s

=1000kbps“千兆比特/秒”(Gb/s),1Gbps=109b/s=1000Mbps“兆兆比特/秒”(Tb/s),1Tbps=1012b/s=1000Gbps如果把b換成B,則表示字節(jié)而不是比特(位)例如,10MBps表示10兆字節(jié)/秒程序中數(shù)據(jù)類型的寬度高級(jí)語言支持多種類型、多種長(zhǎng)度的數(shù)據(jù)例如,C語言中char類型的寬度為1個(gè)字節(jié),可表示一個(gè)字符(非數(shù)值數(shù)據(jù)),也可表示一個(gè)8位的整數(shù)(數(shù)值數(shù)據(jù))不同機(jī)器上表示的同一種類型的數(shù)據(jù)可能寬度不同程序中的數(shù)據(jù)有相應(yīng)的機(jī)器級(jí)表示方式和相應(yīng)的處理指令

(在第五章指令系統(tǒng)介紹具體指令)C聲明典型32位機(jī)器CompaqAlpha機(jī)器charshortintintlongint12441248char*48floatdouble4848C語言中數(shù)值數(shù)據(jù)類型的寬度(單位:字節(jié))從表中看出:同類型數(shù)據(jù)并不是所有機(jī)器都采用相同的寬度,分配的字節(jié)數(shù)隨機(jī)器字長(zhǎng)和編譯器的不同而不同。

CompaqAlpha是一個(gè)針對(duì)高端應(yīng)用的64位機(jī)器,即字長(zhǎng)為64位數(shù)據(jù)的存儲(chǔ)和排列順序80年代開始,幾乎所有通用機(jī)器都用字節(jié)編址ISA設(shè)計(jì)時(shí)要考慮的兩個(gè)問題:如何根據(jù)一個(gè)地址取到一個(gè)32位的字?-字的存放問題一個(gè)字能否存放在任何地址邊界?-字的邊界對(duì)齊問題例如,若inti=-65535,存放在內(nèi)存100號(hào)單元(即占100#~103#),則用“取數(shù)”指令訪問100號(hào)單元取出i時(shí),必須清楚i的4個(gè)字節(jié)是如何存放的。msblsb103102101100littleendianword100#100101102103bigendianword100#Word:FFFF0001大端方式(BigEndian):MSB所在的地址是數(shù)的地址

e.g.IBM360/370,Motorola68k,MIPS,Sparc,HPPA小端方式(LittleEndian):LSB所在的地址是數(shù)的地址

e.g.Intel80x86,DECVAX

有些機(jī)器兩種方式都支持,可通過特定控制位來設(shè)定采用哪種方式。65535=216-1[-65535]補(bǔ)=FFFF0001HBIGEndianversusLittleEndianEx1:MemorylayoutofanumberABCDHlocatedin1000Ex2:Memorylayoutofanumber00ABCDEFHlocatedin1000InLittleEndian:ABCD10011000InBigEndian:

CDAB100110001000100110021003InBigEndian:

00ABCDEFInLittleEndian:00ABCDEF1003100210011000BIGEndianversusLittleEndianEx3:Memorylayoutofainstructionlocatedin1000假定小端機(jī)器中指令:movAX,0x12345(BX)其中操作碼mov為40H,寄存器AX和BX的編號(hào)分別為0001B和0010B,立即數(shù)占32位,則存放順序?yàn)椋?/p>

若在大端機(jī)器上,則存放順序如何?401200012345401245230100000123451240452301001240100510041003100210011000地址只需要考慮指令中立即數(shù)的順序!ByteSwapProblem(字節(jié)交換問題)785634120123increasingbyteaddressBigEndian123456780123LittleEndian

每個(gè)系統(tǒng)內(nèi)部是一致的,但在系統(tǒng)間通信時(shí)可能會(huì)發(fā)生問題!因?yàn)轫樞虿煌枰M(jìn)行順序轉(zhuǎn)換音、視頻和圖像等文件格式或處理程序都涉及到字節(jié)順序問題

ex.Littleendian:GIF,PCPaintbrush,MicrosoftRTF,etc

Bigendian:AdobePhotoshop,JPEG,MacPaint,etc

上述存放在0號(hào)單元的數(shù)據(jù)(字)是什么?12345678H?78563412H?存放方式不同的機(jī)器間程序移植或數(shù)據(jù)通信時(shí),會(huì)發(fā)生什么問題?Alignment(對(duì)齊)目前機(jī)器字長(zhǎng)一般為32位或64位,而存儲(chǔ)器地址按字節(jié)編址指令系統(tǒng)支持對(duì)字節(jié)、半字、字及雙字的運(yùn)算,也有位處理指令各種不同長(zhǎng)度的數(shù)據(jù)存放時(shí),有兩種處理方式:

按邊界對(duì)齊(假定存儲(chǔ)字的寬度為32位,按字節(jié)編址)字地址:4的倍數(shù)(低兩位為0)半字地址:2的倍數(shù)(低位為0)字節(jié)地址:任意不按邊界對(duì)齊壞處:可能會(huì)增加訪存次數(shù)?。▽W(xué)了第四章存儲(chǔ)器組織后會(huì)更明白?。〢lignment:要求數(shù)據(jù)的地址是相應(yīng)的邊界地址每4個(gè)字節(jié)可同時(shí)讀寫按邊界對(duì)齊

邊界不對(duì)齊00040812160字節(jié)1字節(jié)2字節(jié)3字節(jié)0004081216字節(jié)0字節(jié)1

字節(jié)2

字節(jié)3Alignment(對(duì)齊)

如:inti,shortk,doublex,charc,shortj,……

則:&i=0;&k=4;&x=8;&c=16;&j=18;……

則:&i=0;&k=4;&x=6;&c=14;&j=15;……x:3個(gè)周期j:2個(gè)周期x:2個(gè)周期j:1個(gè)周期雖節(jié)省了空間,但增加了訪存次數(shù)!需要權(quán)衡,目前來看,浪費(fèi)一點(diǎn)存儲(chǔ)空間沒有關(guān)系!存儲(chǔ)器按字節(jié)編址每次只能讀寫某個(gè)字地址開始的4個(gè)單元中連續(xù)的1個(gè)、2個(gè)、3個(gè)或4個(gè)字節(jié)ikxc,jAlignment(對(duì)齊)舉例例如,考慮下列兩個(gè)結(jié)構(gòu)聲明:structS1{ int i;

char c;

int j;};structS2{ int i;

int j;

char c;};在要求對(duì)齊的情況下,哪種結(jié)構(gòu)聲明更好?S1:icXXXj048S2:icj048需要12個(gè)字節(jié)只需要9個(gè)字節(jié)對(duì)于“structS2d[4]”,只分配9個(gè)字節(jié)能否滿足對(duì)齊要求?S2:icXXXj048不能!也需要12個(gè)字節(jié)S2比S1好數(shù)據(jù)的檢/糾錯(cuò)(ErrorDetect/Correct)為什么要進(jìn)行數(shù)據(jù)的錯(cuò)誤檢測(cè)與校正?

存取和傳送時(shí),由于元器件故障或噪音干擾等原因會(huì)出現(xiàn)差錯(cuò)。措施:

(1)從計(jì)算機(jī)硬件本身的可靠性入手,在電路、電源、布線等各方面采取必要的措施,提高計(jì)算機(jī)的抗干擾能力;(2)采取相應(yīng)的數(shù)據(jù)檢錯(cuò)和校正措施,自動(dòng)地發(fā)現(xiàn)并糾正錯(cuò)誤。如何進(jìn)行錯(cuò)誤檢測(cè)與校正?大多采用“冗余校驗(yàn)”思想,即除原數(shù)據(jù)信息外,還增加若干位編碼,這些新增的代碼被稱為校驗(yàn)位。存儲(chǔ)器或傳輸線路ff比較糾正器MPM’P”P’M出錯(cuò)信號(hào)數(shù)據(jù)輸出數(shù)據(jù)輸入P為校驗(yàn)位數(shù)據(jù)的檢/糾錯(cuò)比較的結(jié)果為以下三種情況之一:

①?zèng)]有檢測(cè)到錯(cuò)誤,得到的數(shù)據(jù)位直接傳送出去。②檢測(cè)到差錯(cuò),并可以糾錯(cuò)。數(shù)據(jù)位和比較結(jié)果一起送入糾錯(cuò)器,將正確數(shù)據(jù)位傳送出去。③

檢測(cè)到錯(cuò)誤,但無法確認(rèn)哪位出錯(cuò),因而不能進(jìn)行糾錯(cuò)處理,此時(shí),報(bào)告出錯(cuò)情況。BACK存儲(chǔ)器或傳輸線路ff比較糾正器MPM’P”P’M出錯(cuò)信號(hào)數(shù)據(jù)輸出數(shù)據(jù)輸入碼字和碼距什么叫碼距?由若干位代碼組成的一個(gè)字叫“碼字”兩個(gè)碼字中具有不同代碼的位的個(gè)數(shù)叫這兩個(gè)碼字間的“距離”碼制中各碼字間最小距離為“碼距”,它就是這個(gè)碼制的距離。問題:“8421”碼的碼距是幾?2(0010)和3(0011)間距離為1,“8421”碼制的碼距為1。數(shù)據(jù)校驗(yàn)中“碼字”指數(shù)據(jù)位和校驗(yàn)位按某種規(guī)律排列得到的代碼碼距與檢錯(cuò)、糾錯(cuò)能力的關(guān)系(當(dāng)d≤4)

①若碼距d為奇數(shù),則能發(fā)現(xiàn)d-1位錯(cuò),或能糾正(d-1)/2位錯(cuò)。②若碼距d為偶數(shù),則能發(fā)現(xiàn)d/2位錯(cuò),并能糾正(d/2-1)位錯(cuò)。常用的數(shù)據(jù)校驗(yàn)碼有:

奇偶校驗(yàn)碼、海明校驗(yàn)碼、循環(huán)冗余校驗(yàn)碼。奇偶校驗(yàn)碼

基本思想:增加一位奇(偶)校驗(yàn)位并一起存儲(chǔ)或傳送,根據(jù)終部件得到的相應(yīng)數(shù)據(jù)和校驗(yàn)位,再求出新校驗(yàn)位,最后根據(jù)新校驗(yàn)位確定是否發(fā)生了錯(cuò)誤。

實(shí)現(xiàn)原理:假設(shè)數(shù)據(jù)B=bn-1bn-2...b1b0從源部件傳送至終部件。在終部件接收到的數(shù)據(jù)為B’=bn-1’bn-2’...b1’b0’。第一步:在源部件求出奇(偶)校驗(yàn)位P。

若采用奇校驗(yàn),則P=bn-1⊕bn-2⊕...⊕b1⊕b0⊕1。若采用偶校驗(yàn),則P=bn-1⊕bn-2⊕...⊕b1⊕b0。第二步:在終部件求出奇(偶)校驗(yàn)位P’。

若采用奇校驗(yàn),則P’=bn-1’⊕bn-2’⊕...⊕b1’⊕b0’⊕1。若采用偶校驗(yàn),則P’=bn-1’⊕bn-2’⊕...⊕b1’⊕b0’。第三步:計(jì)算最終的校驗(yàn)位P*,并根據(jù)其值判斷有無奇偶錯(cuò)。

假定P在終部件接受到的值為P’’,則P*=P’⊕P”①若P*=1,則表示終部件接受的數(shù)據(jù)有奇數(shù)位錯(cuò)。②若P*=0,則表示終部件接受的數(shù)據(jù)正確或有偶數(shù)個(gè)錯(cuò)。奇偶校驗(yàn)法的特點(diǎn)問題:奇偶校驗(yàn)碼的碼距是幾?為什么?碼距d=2。在奇偶校驗(yàn)碼中,若兩個(gè)數(shù)中有奇數(shù)位不同,則它們相應(yīng)的校驗(yàn)位就不同;若有偶數(shù)位不同,則雖校驗(yàn)位相同,但至少有兩位數(shù)據(jù)位不同。因而任意兩個(gè)碼字之間至少有兩位不同。特點(diǎn)根據(jù)碼距和糾/檢錯(cuò)能力的關(guān)系,它只能發(fā)現(xiàn)奇數(shù)位出錯(cuò),不能發(fā)現(xiàn)偶數(shù)位出錯(cuò),而且也不能確定發(fā)生錯(cuò)誤的位置,不具有糾錯(cuò)能力。開銷小,適用于校驗(yàn)一字節(jié)長(zhǎng)的代碼,故常被用于存儲(chǔ)器讀寫檢查或按字節(jié)傳輸過程中的數(shù)據(jù)校驗(yàn)因?yàn)橐蛔止?jié)長(zhǎng)的代碼發(fā)生錯(cuò)誤時(shí),1位出錯(cuò)的概率較大,兩位以上出錯(cuò)則很少,所以可用奇偶校驗(yàn)。海明校驗(yàn)碼由RichardHamming于1950年提出,目前還被廣泛使用。主要用于存儲(chǔ)器中數(shù)據(jù)存取校驗(yàn)?;舅枷耄浩媾夹r?yàn)碼對(duì)整個(gè)數(shù)據(jù)編碼生成一位校驗(yàn)位。因此這種校驗(yàn)碼檢錯(cuò)能力差,并且沒有糾錯(cuò)能力。如果將整個(gè)數(shù)據(jù)按某種規(guī)律分成若干組,對(duì)每組進(jìn)行相應(yīng)的奇偶檢測(cè),就能提供多位檢錯(cuò)信息,從而對(duì)錯(cuò)誤位置進(jìn)行定位,并將其糾正。海明校驗(yàn)碼實(shí)質(zhì)上就是一種多重奇偶校驗(yàn)碼。處理過程:最終比較時(shí)按位進(jìn)行異或,以確定是否有差錯(cuò)。這種異或操作所得到的結(jié)果稱為故障字(syndromeword)。顯然,校驗(yàn)碼和故障字的位數(shù)是相同。每一組一個(gè)校驗(yàn)位,校驗(yàn)碼位數(shù)等于組數(shù)!每一組內(nèi)采用一位奇偶校驗(yàn)!校驗(yàn)碼位數(shù)的確定假定數(shù)據(jù)位數(shù)為n,校驗(yàn)碼為k位,則故障字位數(shù)也為k位。k位故障字所能表示的狀態(tài)最多是2K,每種狀態(tài)可用來說明一種出錯(cuò)情況。若只有一位錯(cuò),則結(jié)果可能是:數(shù)據(jù)中某一位錯(cuò)(n種可能)校驗(yàn)碼中有一位錯(cuò)(k種可能)無錯(cuò)(1種可能)假定最多有一位錯(cuò),則n和k必須滿足下列關(guān)系:2K≥1+n+k,即:2K-1≥n+k有效數(shù)據(jù)位數(shù)和校驗(yàn)碼位數(shù)間的關(guān)系當(dāng)數(shù)據(jù)有8位時(shí),校驗(yàn)碼和故障字都應(yīng)有4位。說明:4位故障字最多可表示16種狀態(tài),而單個(gè)位出錯(cuò)情況最多只有12種可能(8個(gè)數(shù)據(jù)位和4個(gè)校驗(yàn)位),再加上無錯(cuò)的情況,一共有13種。所以,用16種狀態(tài)表示13種情況應(yīng)是足夠了。1+n+k種情況有效數(shù)據(jù)位數(shù)和校驗(yàn)碼位數(shù)間的關(guān)系

單糾錯(cuò)單糾錯(cuò)/雙檢錯(cuò)數(shù)據(jù)位數(shù)校驗(yàn)位數(shù)增加率校驗(yàn)位數(shù)增加率8450562.516531.25637.532618.75721.87564710.94812.512886.2597.0325693.52103.91n和k的關(guān)系:2K-1≥n+k(n和k分別為數(shù)據(jù)位數(shù)和校驗(yàn)位數(shù))海明碼的分組基本思想:n位數(shù)據(jù)位和k位校驗(yàn)位按某種方式排列為一個(gè)(n+k)位的碼字,將該碼字中每個(gè)出錯(cuò)位的位置與故障字的數(shù)值建立關(guān)系,通過故障字的值確定該碼字中哪一位發(fā)生了錯(cuò)誤,并將其取反來糾正。

根據(jù)上述基本思想,按以下規(guī)則來解釋各故障字的值。

規(guī)則1:

若故障字每位全部是0,則表示沒有發(fā)生錯(cuò)誤。

規(guī)則2:若故障字中有且僅有一位為1,則表示校驗(yàn)位中有一位出錯(cuò),因而不需糾正。

規(guī)則3:若故障字中多位為1,則表示有一個(gè)數(shù)據(jù)位出錯(cuò),其在碼字中的出錯(cuò)位置由故障字的數(shù)值來確定。糾正時(shí)只要將出錯(cuò)位取反即可。海明碼的分組

以8位數(shù)據(jù)進(jìn)行單個(gè)位檢錯(cuò)和糾錯(cuò)為例說明。假定8位數(shù)據(jù)M=M8M7M6M5M4M3M2M1,4位校驗(yàn)位P=P4P3P2P1。根據(jù)規(guī)則將M和P按一定的規(guī)律排到一個(gè)12位碼字中。

據(jù)規(guī)則1,故障字為0000時(shí),表示無錯(cuò)。

據(jù)規(guī)則2,故障字中有且僅有一位為1時(shí),表示校驗(yàn)位中有一位出錯(cuò)。此時(shí),故障字只可能是0001、0010、0100、1000,將這四種狀態(tài)分別代表校驗(yàn)位中P1、P2、P3、P4位發(fā)生錯(cuò)誤,因此,它們分別位于碼字的第1、2、4、8位。據(jù)規(guī)則3,將其他多位為1的故障字依次表示數(shù)據(jù)位M1~M8發(fā)生錯(cuò)誤的情況。因此,數(shù)據(jù)位M1~M8分別位于碼字的第0011(3)、0101(5)、0110(6)、0111(7)、1001(9)、1010(10)、1011(11)、1100(12)位。即碼字的排列為:

M8M7M6M5P4M4M3M2P3M1P2P1這樣,得到故障字S=S4S3S2S1的各個(gè)狀態(tài)和出錯(cuò)情況的對(duì)應(yīng)關(guān)系表,可根據(jù)這種對(duì)應(yīng)關(guān)系對(duì)整個(gè)數(shù)據(jù)進(jìn)行分組。是邏輯順序,物理上M和P是分開的!海明校驗(yàn)碼分組情況數(shù)據(jù)位或校驗(yàn)位出錯(cuò)一定會(huì)影響所在組的奇偶性。碼字:M8M7M6M5P4M4M3M2P3M1P2P1例:若M2出錯(cuò),則故障字為0101,因而會(huì)改變S3和S1所在分組的奇偶性。故M2同時(shí)被分到第3(S3)組和第1(S1)組。問題:若P1出錯(cuò),則如何?若M8出錯(cuò),則如何?P1~0001,分在第1組;M8~1100,分在第4組和第3組故障字S4S3S2S1每一位的值反映所在組的奇偶性SKIP校驗(yàn)位的生成和檢錯(cuò)、糾錯(cuò)分組完成后,就可對(duì)每組采用相應(yīng)的奇(偶)校驗(yàn),以得到相應(yīng)的一個(gè)校驗(yàn)位。假定采用偶校驗(yàn)(取校驗(yàn)位Pi,使對(duì)應(yīng)組中有偶數(shù)個(gè)1),則得到校驗(yàn)位與數(shù)據(jù)位之間存在如下關(guān)系:

P4=M5⊕M6⊕M7⊕M8 P3=M2⊕M3⊕M4⊕M8P2=M1⊕M3⊕M4⊕M6⊕M7

P1=M1⊕M2⊕M4⊕M5⊕M7

碼字:M8M7M6M5P4M4M3M2P3M1P2P1海明校驗(yàn)過程根據(jù)公式求出每一組對(duì)應(yīng)的校驗(yàn)位Pi(i=1,2,3,4)數(shù)據(jù)M和校驗(yàn)位P一起被存儲(chǔ),根據(jù)讀出數(shù)據(jù)M’得新校驗(yàn)位P’讀出校驗(yàn)位P’’與新校驗(yàn)位P’按位進(jìn)行異或操作,得故障字S=S4S3S2S1根據(jù)S的值確定:無錯(cuò)、僅校驗(yàn)位錯(cuò)、某個(gè)數(shù)據(jù)位錯(cuò)存儲(chǔ)器或傳輸線路ff比較糾正器MPM’P”P’M出錯(cuò)信號(hào)數(shù)據(jù)輸出數(shù)據(jù)輸入海明碼舉例

假定一個(gè)8位數(shù)據(jù)M為:M8M7M6M5M4M3M2M1=01101010,根據(jù)上述公式求出相應(yīng)的校驗(yàn)位為:P4=M5⊕M6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論