




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章數(shù)據(jù)的機(jī)器級(jí)表示
數(shù)值數(shù)據(jù)的表示
非數(shù)值數(shù)據(jù)的表示
數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)的表示和運(yùn)算主要教學(xué)目標(biāo)掌握計(jì)算機(jī)內(nèi)部各種數(shù)據(jù)的編碼表示及其運(yùn)算方法了解高級(jí)語(yǔ)言程序中的各種類型變量對(duì)應(yīng)的表示形式在高級(jí)語(yǔ)言程序中的變量、機(jī)器數(shù)和底層硬件之間建立關(guān)聯(lián)綜合運(yùn)用所學(xué)知識(shí),分析高級(jí)語(yǔ)言和機(jī)器級(jí)語(yǔ)言程序設(shè)計(jì)中遇到的各種與數(shù)據(jù)表示相關(guān)的問題,解釋相應(yīng)的執(zhí)行結(jié)果C語(yǔ)言參考網(wǎng)站:/c/linux-c-programming/數(shù)據(jù)的表示和運(yùn)算分以下兩個(gè)部分介紹第一講:數(shù)值數(shù)據(jù)的表示定點(diǎn)數(shù)的編碼表示、整數(shù)的表示、無(wú)符號(hào)整數(shù)、帶符號(hào)整數(shù)、浮點(diǎn)數(shù)的表示C語(yǔ)言程序的整數(shù)類型和浮點(diǎn)數(shù)類型第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存儲(chǔ)邏輯值、西文字符、漢字字符數(shù)據(jù)寬度單位、大端/小端、對(duì)齊存放從C程序中的變量和常量出發(fā),解釋其在機(jī)器中的二進(jìn)制表示課程內(nèi)容概要/*---sum.c---*/intsum(inta[],unsignedlen){ int i,sum=0; for (i=0;i<=len–1;i++) sum+=a[i]; returnsum;}/*---main.c---*/intmain(){ int a[1]={100}; intsum;sum=sum(a,0);printf(“%d”,sum);}數(shù)據(jù)的表示數(shù)據(jù)的運(yùn)算如果程序處理的是圖像、視頻、聲音、文字等數(shù)據(jù),那么,(1)如何獲得這些數(shù)據(jù)?(2)如何表示這些數(shù)據(jù)?(3)如何處理這些數(shù)據(jù)?“轉(zhuǎn)換”的概念在數(shù)據(jù)表示中的反映具體實(shí)現(xiàn)抽象概括感覺媒體信息樹、鏈表等結(jié)構(gòu)化數(shù)據(jù)描述int,float,array,struct等類型指令指定寄存器或內(nèi)存中數(shù)據(jù)ALU中運(yùn)算或總線上傳輸?shù)臄?shù)據(jù)邏輯門位信息問題(應(yīng)用)算法程序(語(yǔ)言)指令集體系結(jié)構(gòu)(ISA)微體系結(jié)構(gòu)電路器件(晶體管)各類數(shù)據(jù)之間的轉(zhuǎn)換關(guān)系對(duì)連續(xù)信息采樣,以使信息離散化對(duì)離散樣本用0和1進(jìn)行編碼定點(diǎn)運(yùn)算指令浮點(diǎn)運(yùn)算指令邏輯、位操作或字符處理指令信息的二進(jìn)制編碼機(jī)器級(jí)數(shù)據(jù)分兩大類:數(shù)值數(shù)據(jù):無(wú)符號(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ù)Decimal/Binary(十/二進(jìn)制數(shù))Thebinarynumber11001inpowersof2:用一個(gè)下標(biāo)表示數(shù)的基(radix
/base)
或用后綴B-二進(jìn)制(H-十六進(jìn)制(前綴0x-)、O-八進(jìn)制)
110012=2510、11001B=25
1
24+1
23+0
22+0
21+1
20=16
+8
+0
+0
+1=25Thedecimalnumber5836.47inpowersof10:5
103+8
102+3
101+6
100
+4
10-1+7
10-2
Octal/Hexadecimal(八/十六進(jìn)制數(shù))23=824=16計(jì)算機(jī)用二進(jìn)制表示所有信息!為什么要引入8/16進(jìn)制?8/16進(jìn)制是二進(jìn)制的簡(jiǎn)便表示,便于閱讀和書寫!它們之間對(duì)應(yīng)簡(jiǎn)單,轉(zhuǎn)換容易。在機(jī)器內(nèi)部用二進(jìn)制,在屏幕或其他外部設(shè)備上表示時(shí),轉(zhuǎn)換為8/16進(jìn)制數(shù),可縮短長(zhǎng)度早期有用8進(jìn)制數(shù)簡(jiǎn)便表示2進(jìn)制數(shù)現(xiàn)在基本上都用16進(jìn)制數(shù)表示機(jī)器數(shù)一個(gè)8進(jìn)制數(shù)字用3位二進(jìn)制數(shù)字表示一個(gè)16進(jìn)制數(shù)字用4位二進(jìn)制數(shù)字表示(1)二/八/十六進(jìn)制數(shù)的相互轉(zhuǎn)換①八進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)(13.724)8=(001011.111010100)2=(1011.1110101)2②十六進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)(2B.5E)16=(00101011.01011110)2=(101011.0101111)2
③二進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)
(0.10101)2=(000.101010)2=(0.52)8
④二進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)(11001.11)2=(00011001.1100)2=(19.C)16
ConversionsofnumbersConversionsofnumbers(2)R進(jìn)制數(shù)=>十進(jìn)制數(shù)
按“權(quán)”展開(apowerofR)
例1:(10101.01)2=1x24+1x22+1x20+1x2-2=(21.25)10
例2:(307.6)8=3x82+7x80+6x8-1=(199.75)10
例1:(3A.1)16=3x161+10x160+1x16-1=(58.0625)10(3)十進(jìn)制數(shù)=>R進(jìn)制數(shù)
整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換①整數(shù)(integralpart)----“除基取余,上右下左”②小數(shù)(fractionalpart)----“乘基取整,上左下右”
簡(jiǎn)便方式:按2的冪直接加減Conversionsofnumbers(3)十進(jìn)制數(shù)=>R進(jìn)制數(shù)
整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換①整數(shù)(integralpart)----“除基取余,上右下左”②小數(shù)(fractionalpart)----“乘基取整,上左下右”實(shí)際按簡(jiǎn)便方法先轉(zhuǎn)換為二進(jìn)制數(shù),再按需轉(zhuǎn)換為8/16進(jìn)制數(shù)
整數(shù):2、4、8、16、…、512、1024、2048、4096、…、65536小數(shù):0.5、0.25、0.125、0.0625、0.03125、……例:4123.25=4096+16+8+2+1+0.25=1000000011011.01B
=(101B.4)164023=(4096-1)-64-8=111111111111B-1000000B-1000B
=111110110111B==FB7H=(FB7)16理論上的做法例1:(835.6875)10=(1101000011.1011)2整數(shù)----“除基取余,上右下左”小數(shù)----“乘基取整,上左下右”DecimaltoBinaryConversions簡(jiǎn)便方法:835-512-256-64-3=0,故835=(1101000011)20.6875-0.5-0.125-0.0625=0,故0.6875=(0.1011)2例2:(835.63)10=(1503.50243…)8整數(shù)----“除基取余,上右下左”小數(shù)----“乘基取整,上左下右”有可能小數(shù)部分總得不到0,此時(shí)得到一個(gè)近似值。DecimaltoBinaryConversions
數(shù)值數(shù)據(jù)的表示數(shù)值數(shù)據(jù)表示的三要素進(jìn)位記數(shù)制定、浮點(diǎn)表示如何用二進(jìn)制編碼即:要確定一個(gè)數(shù)值數(shù)據(jù)的值必須先確定這三個(gè)要素。例如,機(jī)器數(shù)01011001的值是多少?進(jìn)位記數(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ù)來(lái)表示)定點(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ǔ)碼來(lái)表示但浮點(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)-4的模12補(bǔ)碼等于8。同樣有-3≡9(mod12);-5≡7(mod12)等結(jié)論2:對(duì)于某一確定的模,數(shù)x減去小于模的數(shù)y,總可以用數(shù)x加上-y的補(bǔ)碼來(lái)代替。補(bǔ)碼(modular運(yùn)算):實(shí)現(xiàn)+和–的統(tǒng)一
重要概念:在一個(gè)模運(yùn)算系統(tǒng)中,一個(gè)數(shù)與它除以“模”后的余數(shù)等價(jià)。結(jié)論1:一個(gè)負(fù)數(shù)的補(bǔ)碼等于模減該負(fù)數(shù)的絕對(duì)值。(13mod12等于1,即13點(diǎn)鐘等于1點(diǎn)鐘)補(bǔ)碼的表示現(xiàn)實(shí)世界的模運(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位留在算盤上。計(jì)算機(jī)中的運(yùn)算器是模運(yùn)算系統(tǒng)
8位二進(jìn)制加法器模運(yùn)算系統(tǒng)
計(jì)算01111111-01000000=?
01111111-01000000=01111111+(28-
01000000)=01111111+11000000=100111111(mod28)
=00111111只留余數(shù),1被丟棄結(jié)論1:一個(gè)負(fù)數(shù)的補(bǔ)碼等于對(duì)應(yīng)正數(shù)補(bǔ)碼的“各位取反、末位加1”計(jì)算機(jī)中運(yùn)算器只有有限位。假定為n位,則運(yùn)算結(jié)果只能保留低n位,故可看成是個(gè)只有n檔的二進(jìn)制算盤。所以,其模為2n。模為23計(jì)算機(jī)中的運(yùn)算器是模運(yùn)算系統(tǒng)計(jì)算機(jī)中的運(yùn)算器是模運(yùn)算系統(tǒng)當(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≤X<2n
,mod2n)定點(diǎn)小數(shù):[X]補(bǔ)=2+X(-1≤X<1,mod2)注:實(shí)際上在計(jì)算機(jī)中并不使用補(bǔ)碼定點(diǎn)小數(shù)!無(wú)需掌握該知識(shí)點(diǎn)0000000110000010010011101111011101011010101111001101001101101001求特殊數(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)④[+0]補(bǔ)=[-0]補(bǔ)=00…0(n個(gè)0)
32位機(jī)器中,int、short、char型數(shù)據(jù)的機(jī)器數(shù)各占幾位?注:計(jì)算機(jī)中并不會(huì)出現(xiàn)-1.0的補(bǔ)碼,這里只是想說(shuō)明同一個(gè)真值在機(jī)器中可能有不同的機(jī)器數(shù)!③[-1.0]補(bǔ)=2-1.0
=1.00…0(n-1個(gè)0)(mod2)補(bǔ)碼與真值之間的簡(jiǎn)便轉(zhuǎn)換例:設(shè)機(jī)器數(shù)有8位,求123和-123的補(bǔ)碼表示。解:123=127–4=01111111B–100B=01111011B
–
123=–01111011B[01111011]補(bǔ)=28+01111011=100000000+01111011
=01111011(mod28),即7BH。
[–
01111011]補(bǔ)=28–01111011=100000000–01111011=11111111–01111011+1=10000100+1
=10000101,即85H。如何快速得到123的二進(jìn)制表示?各位取反,末位加1當(dāng)機(jī)器數(shù)為16位時(shí),結(jié)果怎樣?
Two’sComplement(補(bǔ)碼的表示)正數(shù):符號(hào)位(signbit)為0,數(shù)值部分不變負(fù)數(shù):符號(hào)位為1,數(shù)值部分“各位取反,末位加1”+0和-0表示唯一變形(模4)補(bǔ)碼:雙符號(hào),用于存放可溢出的中間結(jié)果。值太大,用4位補(bǔ)碼無(wú)法表示,故“溢出”!但用變形補(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)°一般來(lái)說(shuō),當(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°為什么要用移碼來(lái)表示指數(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)移碼主要用來(lái)表示浮點(diǎn)數(shù)階碼!0的移碼表示唯一移碼和補(bǔ)碼僅第一位不同Unsignedinteger(無(wú)符號(hào)整數(shù))機(jī)器中字的位排列順序有兩種方式:(例:32位字:0…010112)高到低位從左到右:00000000000000000000000000001011高到低位從右到左:11010000000000000000000000000000Leftmost和rightmost這兩個(gè)詞有歧義,故用LSB(LeastSignificantBit)來(lái)表示最低有效位,用MSB來(lái)表示最高有效位高位到低位多采用從左往右排列一般在全部是正數(shù)運(yùn)算且不出現(xiàn)負(fù)值結(jié)果的場(chǎng)合下,可使用無(wú)符號(hào)數(shù)表示。例如,地址運(yùn)算,編號(hào)表示,等等無(wú)符號(hào)整數(shù)的編碼中沒有符號(hào)位能表示的最大值大于位數(shù)相同的帶符號(hào)整數(shù)的最大值(Why?)例如,8位無(wú)符號(hào)整數(shù)最大是255(11111111)而8位帶符號(hào)整數(shù)最大為127(01111111)總是整數(shù),所以很多時(shí)候就簡(jiǎn)稱為“無(wú)符號(hào)數(shù)”MSBLSBSignedinteger(帶符號(hào)整數(shù),定點(diǎn)整數(shù))計(jì)算機(jī)必須能處理正數(shù)(positive)和負(fù)數(shù)(negative),MSB表示數(shù)符有三種定點(diǎn)編碼方式Signedmagnitude(原碼)
現(xiàn)用來(lái)表示浮點(diǎn)(實(shí))數(shù)的尾數(shù)One’scomplement(反碼)現(xiàn)已不用于表示數(shù)值數(shù)據(jù)Two’scomplement(補(bǔ)碼)
50年代以來(lái),所有計(jì)算機(jī)都用補(bǔ)碼來(lái)表示定點(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ù)C語(yǔ)言程序中的整數(shù)關(guān)系表達(dá)式運(yùn)算類型結(jié)果說(shuō)明0==0U-1<0-1<0U2147483647>-2147483647-12147483647U>-2147483647-12147483647>(int)2147483648U-1>-2(unsigned)-1>-2無(wú)符號(hào)數(shù):unsignedint(short/long);帶符號(hào)整數(shù):int(short/long)常在一個(gè)數(shù)的后面加一個(gè)“u”或“U”表示無(wú)符號(hào)數(shù)C語(yǔ)言標(biāo)準(zhǔn)規(guī)定:若運(yùn)算中同時(shí)有無(wú)符號(hào)和帶符號(hào)整數(shù),則按無(wú)符號(hào)整數(shù)運(yùn)算假定以下關(guān)系表達(dá)式在32位用補(bǔ)碼表示的機(jī)器上執(zhí)行,結(jié)果是什么?C語(yǔ)言標(biāo)準(zhǔn)規(guī)定了各類型最小取值范圍,如:int型至少應(yīng)為16位,取值范圍為-32768到32767,而int型數(shù)據(jù)具體的取值范圍則由ABI規(guī)范規(guī)定。C語(yǔ)言程序中的整數(shù)關(guān)系表達(dá)式類型結(jié)果說(shuō)明0==0U-1<0-1<0U2147483647>-2147483647-12147483647U>-2147483647-12147483647>(int)2147483648U-1>-2(unsigned)-1>-2無(wú)帶無(wú)帶無(wú)帶帶無(wú)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ù)想的相反!C語(yǔ)言程序中的整數(shù)例如,考慮以下C代碼:1 intx=–1;2 unsignedu=2147483648;34 printf(“x=%u=%d\n”,x,x);5 printf(“u=%u=%d\n”,u,u);在32位機(jī)器上運(yùn)行上述代碼時(shí),它的輸出結(jié)果是什么?為什么?x=4294967295=–1u=2147483648=–2147483648
因?yàn)楱C1的補(bǔ)碼整數(shù)表示為“11…1”,作為32位無(wú)符號(hào)數(shù)解釋時(shí),其值為232–1=4294967296–1=4294967295。231的無(wú)符號(hào)數(shù)表示為“100…0”,被解釋為32位帶符號(hào)整數(shù)時(shí),其值為最小負(fù)數(shù):–232-1=–231=–2147483648。C語(yǔ)言程序中的整數(shù)1)在有些32位系統(tǒng)上,C表達(dá)式-2147483648<2147483647的執(zhí)行結(jié)果為false。Why?2)若定義變量“inti=-2147483648;”,則“i<2147483647”的執(zhí)行結(jié)果為true。Why?3)如果將表達(dá)式寫成“-2147483647-1<2147483647”,則結(jié)果會(huì)怎樣呢?Why?1)在ISOC90標(biāo)準(zhǔn)下,2147483648為unsignedint型,因此
“-2147483648<2147483647”按無(wú)符號(hào)數(shù)比較,10……0B比01……1大,結(jié)果為false。
在ISOC99標(biāo)準(zhǔn)下,2147483648為longlong型,因此
“-2147483648<2147483647”按帶符號(hào)整數(shù)比較,10……0B比01……1小,結(jié)果為true。2)i<2147483647按int型數(shù)比較,結(jié)果為true。3)-2147483647-1<2147483647按int型比較,結(jié)果為true。由C語(yǔ)言中的“IntegerPromotion”整數(shù)類型提升規(guī)則決定的。編譯器處理常量時(shí)默認(rèn)的類型C90 范圍類型0~231-1int231~232-1unsignedint232~263-1longlong263~264-1unsignedlonglongC99范圍類型0~231-1int231~263-1longlong263~264-1unsignedlonglong231=2147483648,機(jī)器數(shù)為:100┅0(31個(gè)0)C表達(dá)式類型轉(zhuǎn)換(整數(shù)類型提升規(guī)則)unsignedlonglong↑longlong↑unsigned↑
int↑(unsigned)char,short猜測(cè)執(zhí)行結(jié)果是什么?01C90上的運(yùn)行結(jié)果是什么?C99的結(jié)果大家回去試試。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ù)數(shù)值部分M。規(guī)格化尾數(shù)的小數(shù)點(diǎn)后第一位總是1,故規(guī)定第一位默認(rèn)的“1”不明顯表示出來(lái)。這樣可用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
×RExponent°32-bit規(guī)格化數(shù):310
S
Exponent
Significand1bit?bits?bits
S
是符號(hào)位(Sign)
Exponent用移碼(增碼)來(lái)表示Significand表示xxxxxxxxxxxxx,尾數(shù)部分
(基可以是2/4/8/16,約定信息,無(wú)需顯式表示)°早期的計(jì)算機(jī),各自定義自己的浮點(diǎn)數(shù)格式問題:浮點(diǎn)數(shù)表示不統(tǒng)一會(huì)帶來(lái)什么問題?“Father”oftheIEEE754standard現(xiàn)在所有計(jì)算機(jī)都采用IEEE754來(lái)表示浮點(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í),帶來(lái)麻煩
IEEE754標(biāo)準(zhǔn)
SinglePrecision:
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用來(lái)表示特殊值!為什么用127?若用128,則階碼范圍為多少?00000001(-127)~11111110(126)規(guī)格化數(shù):+/-1.xxxxxxxxxxtwox2Exponent規(guī)定:小數(shù)點(diǎn)前總是“1”,故可隱含表示。注意:和前面例子規(guī)定不一樣!Ex: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.xx…x×2-126關(guān)于浮點(diǎn)數(shù)精度的一個(gè)例子
61.419998和61.420002是兩個(gè)可表示數(shù),兩者之間相差0.000004。當(dāng)輸入數(shù)據(jù)是一個(gè)不可表示數(shù)時(shí),機(jī)器將其轉(zhuǎn)換為最鄰近的可表示數(shù)。第一講小結(jié)在機(jī)器內(nèi)部編碼后的數(shù)稱為機(jī)器數(shù),其值稱為真值定義數(shù)值數(shù)據(jù)有三個(gè)要素:進(jìn)制、定點(diǎn)/浮點(diǎn)、編碼整數(shù)的表示無(wú)符號(hào)數(shù):正整數(shù),用來(lái)表示地址等;帶符號(hào)整數(shù):用補(bǔ)碼表示C語(yǔ)言中的整數(shù)無(wú)符號(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)十進(jìn)制數(shù)的表示:用ASCII碼或BCD碼表示10在計(jì)算機(jī)中有幾種可能的表示?
-10呢?數(shù)據(jù)的表示和運(yùn)算分以下兩個(gè)部分介紹第一講:數(shù)值數(shù)據(jù)的表示定點(diǎn)數(shù)的編碼表示整數(shù)的表示
無(wú)符號(hào)整數(shù)、帶符號(hào)整數(shù)浮點(diǎn)數(shù)的表示C語(yǔ)言程序的整數(shù)類型和浮點(diǎn)數(shù)類型第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存儲(chǔ)邏輯值、西文字符、漢字字符數(shù)據(jù)寬度單位大端/小端、對(duì)齊存放表示用一位表示。例如,真:1/假:0N位二進(jìn)制數(shù)可表示N個(gè)邏輯數(shù)據(jù),或一個(gè)位串運(yùn)算按位進(jìn)行如:按位與/按位或/邏輯左移/邏輯右移等識(shí)別邏輯數(shù)據(jù)和數(shù)值數(shù)據(jù)在形式上并無(wú)差別,也是一串0/1序列,機(jī)器靠指令來(lái)識(shí)別。位串用來(lái)表示若干個(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ù)不超過(guò)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碼!西文字符的編碼表示一個(gè)典型程序的轉(zhuǎn)換處理過(guò)程#include<stdio.h>intmain(){printf("hello,world\n");}經(jīng)典的“hello.c”C-源程序#include<sp><stdio.3510511099108117100101326011511610010511146h>\n\nint<sp>main()\n{1046210101051101163210997105110404110123\n<sp><sp><sp><sp>printf("hel10323232321121141051101161024034104101108lo,<sp>world\n");\n}10811144321191111141081009211034415910125hello.c的ASCII文本表示功能:輸出“hello,world”預(yù)處理(cpp)編譯(cc1)匯編(as)鏈接(ld)printf.o計(jì)算機(jī)不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s匯編語(yǔ)言程序(文本)hello.o可重定位目標(biāo)程序(二進(jìn)制)hello可執(zhí)行目標(biāo)程序(二進(jìn)制)以下是GCC+Linux平臺(tái)中的處理過(guò)程特點(diǎn)漢字是表意文字,一個(gè)字就是一個(gè)方塊圖形。漢字?jǐn)?shù)量巨大,總數(shù)超過(guò)6萬(wàn)字,給漢字在計(jì)算機(jī)內(nèi)部的表示、漢字的傳輸與交換、漢字的輸入和輸出等帶來(lái)了一系列問題。編碼形式有以下幾種漢字代碼:輸入碼:對(duì)漢字用相應(yīng)按鍵進(jìn)行編碼表示,用于輸入內(nèi)碼:用于在系統(tǒng)中進(jìn)行存儲(chǔ)、查找、傳送等處理字模點(diǎn)陣碼或輪廓描述:
描述漢字字模的點(diǎn)陣或輪廓,用于輸出
漢字及國(guó)際字符的編碼表示問題:西文字符有沒有輸入碼?有沒有內(nèi)碼?有沒有字模點(diǎn)陣或輪廓描述?漢字內(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)碼為便于打印、顯示漢字,漢字字形必須預(yù)先存在機(jī)內(nèi)字庫(kù)(font):所有漢字形狀的描述信息集合不同字體(如宋體、仿宋、楷體、黑體等)對(duì)應(yīng)不同字庫(kù)從字庫(kù)中找到字形描述信息,然后送設(shè)備輸出問題:如何知道到哪里找相應(yīng)的字形信息?漢字內(nèi)碼與其在字庫(kù)中的位置有關(guān)!!字形主要有兩種描述方法:字模的點(diǎn)陣描述(圖像方式)字模的輪廓描述(圖形方式)直線向量輪廓曲線輪廓(TrueType字形)漢字的字模點(diǎn)陣碼和輪廓描述數(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)部定點(diǎn)運(yùn)算部件的位數(shù)、通用寄存器的寬度等。)“字”表示被處理信息的單位,用來(lái)度量數(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硬盤和文件使用的單位不同的硬盤制造商和操作系統(tǒng)用不同的度量方式,因而比較混亂為避免歧義,國(guó)際電工委員會(huì)(IEC)在1998年給出了表示2的冪次的二進(jìn)制前綴字母定義數(shù)據(jù)量的度量單位硬盤和文件使用的單位不同的硬盤制造商和操作系統(tǒng)用不同的度量方式,因而比較混亂為避免歧義,國(guó)際電工委員會(huì)(IEC)給出了二進(jìn)制前綴字母定義,可用不同的前綴表示所采用的度量方式程序中數(shù)據(jù)類型的寬度高級(jí)語(yǔ)言支持多種類型、多種長(zhǎng)度的數(shù)據(jù)例如,C語(yǔ)言中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)的處理指令C聲明典型32位機(jī)器CompaqAlpha機(jī)器charshortintintlongint12441248char*48floatdouble4848C語(yǔ)言中數(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#
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息處理技術(shù)員必看試題及答案
- 2025年江蘇省蘇州市初三(上)道法期末陽(yáng)光調(diào)研測(cè)卷含答案
- 2025屆陜西省銅川市名校八年級(jí)數(shù)學(xué)第二學(xué)期期末監(jiān)測(cè)模擬試題含解析
- 軟件項(xiàng)目需求分析試題及答案
- 網(wǎng)絡(luò)服務(wù)質(zhì)量監(jiān)測(cè)試題及答案
- 創(chuàng)新驅(qū)動(dòng)與企業(yè)戰(zhàn)略風(fēng)險(xiǎn)輿情試題及答案
- 寧夏回族自治區(qū)銀川六中2025屆數(shù)學(xué)八下期末監(jiān)測(cè)模擬試題含解析
- 法學(xué)與社會(huì)現(xiàn)實(shí)的結(jié)合試題及答案
- 科技發(fā)展與企業(yè)戰(zhàn)略調(diào)整試題及答案
- 網(wǎng)絡(luò)設(shè)備維護(hù)與安全防護(hù)技巧試題及答案
- 術(shù)中低體溫預(yù)防
- 人力資源管理數(shù)字化轉(zhuǎn)型解決方案
- 國(guó)開電大《企業(yè)信息管理》形考任務(wù)參考答案
- 《電力系統(tǒng)仿真概述》課件
- 2024年版水利水電工程單元工程單元工程質(zhì)量驗(yàn)收評(píng)定表
- 《酵母表達(dá)系統(tǒng)》課件
- 風(fēng)力發(fā)電運(yùn)維值班員(高級(jí)工)理論考試題庫(kù)(濃縮400題)
- 2020版新疆維吾爾自治區(qū)市政工程消耗量定額(四)
- 運(yùn)動(dòng)康復(fù)案例分析
- GB/T 22082-2024預(yù)制混凝土襯砌管片
- 2023年中國(guó)石油招聘考試真題
評(píng)論
0/150
提交評(píng)論