




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章數(shù)據(jù)的機器級表示
數(shù)值數(shù)據(jù)的表示
非數(shù)值數(shù)據(jù)的表示
數(shù)據(jù)的存儲數(shù)據(jù)的表示和運算主要教學目標掌握計算機內部各種數(shù)據(jù)的編碼表示及其運算方法了解高級語言程序中的各種類型變量對應的表示形式在高級語言程序中的變量、機器數(shù)和底層硬件之間建立關聯(lián)綜合運用所學知識,分析高級語言和機器級語言程序設計中遇到的各種與數(shù)據(jù)表示相關的問題,解釋相應的執(zhí)行結果C語言參考網(wǎng)站:/c/linux-c-programming/數(shù)據(jù)的表示和運算分以下兩個部分介紹第一講:數(shù)值數(shù)據(jù)的表示定點數(shù)的編碼表示、整數(shù)的表示、無符號整數(shù)、帶符號整數(shù)、浮點數(shù)的表示C語言程序的整數(shù)類型和浮點數(shù)類型第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存儲邏輯值、西文字符、漢字字符數(shù)據(jù)寬度單位、大端/小端、對齊存放從C程序中的變量和常量出發(fā),解釋其在機器中的二進制表示課程內容概要/*---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ù)的運算如果程序處理的是圖像、視頻、聲音、文字等數(shù)據(jù),那么,(1)如何獲得這些數(shù)據(jù)?(2)如何表示這些數(shù)據(jù)?(3)如何處理這些數(shù)據(jù)?“轉換”的概念在數(shù)據(jù)表示中的反映具體實現(xiàn)抽象概括感覺媒體信息樹、鏈表等結構化數(shù)據(jù)描述int,float,array,struct等類型指令指定寄存器或內存中數(shù)據(jù)ALU中運算或總線上傳輸?shù)臄?shù)據(jù)邏輯門位信息問題(應用)算法程序(語言)指令集體系結構(ISA)微體系結構電路器件(晶體管)各類數(shù)據(jù)之間的轉換關系對連續(xù)信息采樣,以使信息離散化對離散樣本用0和1進行編碼定點運算指令浮點運算指令邏輯、位操作或字符處理指令信息的二進制編碼機器級數(shù)據(jù)分兩大類:數(shù)值數(shù)據(jù):無符號整數(shù)、帶符號整數(shù)、浮點數(shù)(實數(shù))、十進制數(shù)非數(shù)值數(shù)據(jù):邏輯數(shù)(包括位串)、西文字符和漢字計算機內部所有信息都用二進制(即:0和1)進行編碼用二進制編碼的原因:制造二個穩(wěn)定態(tài)的物理器件容易二進制編碼、計數(shù)、運算規(guī)則簡單正好與邏輯命題對應,便于邏輯運算,并可方便地用邏輯電路實現(xiàn)算術運算真值和機器數(shù)機器數(shù):用0和1編碼的計算機內部的0/1序列真值:機器數(shù)真正的值,即:現(xiàn)實中帶正負號的數(shù)Decimal/Binary(十/二進制數(shù))Thebinarynumber11001inpowersof2:用一個下標表示數(shù)的基(radix
/base)
或用后綴B-二進制(H-十六進制(前綴0x-)、O-八進制)
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(八/十六進制數(shù))23=824=16計算機用二進制表示所有信息!為什么要引入8/16進制?8/16進制是二進制的簡便表示,便于閱讀和書寫!它們之間對應簡單,轉換容易。在機器內部用二進制,在屏幕或其他外部設備上表示時,轉換為8/16進制數(shù),可縮短長度早期有用8進制數(shù)簡便表示2進制數(shù)現(xiàn)在基本上都用16進制數(shù)表示機器數(shù)一個8進制數(shù)字用3位二進制數(shù)字表示一個16進制數(shù)字用4位二進制數(shù)字表示(1)二/八/十六進制數(shù)的相互轉換①八進制數(shù)轉換成二進制數(shù)(13.724)8=(001011.111010100)2=(1011.1110101)2②十六進制數(shù)轉換成二進制數(shù)(2B.5E)16=(00101011.01011110)2=(101011.0101111)2
③二進制數(shù)轉換成八進制數(shù)
(0.10101)2=(000.101010)2=(0.52)8
④二進制數(shù)轉換成十六進制數(shù)(11001.11)2=(00011001.1100)2=(19.C)16
ConversionsofnumbersConversionsofnumbers(2)R進制數(shù)=>十進制數(shù)
按“權”展開(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)十進制數(shù)=>R進制數(shù)
整數(shù)部分和小數(shù)部分分別轉換①整數(shù)(integralpart)----“除基取余,上右下左”②小數(shù)(fractionalpart)----“乘基取整,上左下右”
簡便方式:按2的冪直接加減Conversionsofnumbers(3)十進制數(shù)=>R進制數(shù)
整數(shù)部分和小數(shù)部分分別轉換①整數(shù)(integralpart)----“除基取余,上右下左”②小數(shù)(fractionalpart)----“乘基取整,上左下右”實際按簡便方法先轉換為二進制數(shù),再按需轉換為8/16進制數(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簡便方法: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,此時得到一個近似值。DecimaltoBinaryConversions
數(shù)值數(shù)據(jù)的表示數(shù)值數(shù)據(jù)表示的三要素進位記數(shù)制定、浮點表示如何用二進制編碼即:要確定一個數(shù)值數(shù)據(jù)的值必須先確定這三個要素。例如,機器數(shù)01011001的值是多少?進位記數(shù)制十進制、二進制、十六進制、八進制數(shù)及其相互轉換定/浮點表示(解決小數(shù)點問題)定點整數(shù)、定點小數(shù)浮點數(shù)(可用一個定點小數(shù)和一個定點整數(shù)來表示)定點數(shù)的編碼(解決正負號問題)原碼、補碼、反碼、移碼(反碼很少用)答案是:不知道!
SignandMagnitude(原碼的表示)BinaryDecimal0123456700000001001000110100010101100111
容易理解,但是:0的表示不唯一,故不利于程序員編程
加、減運算方式不統(tǒng)一
需額外對符號位進行處理,故不利于硬件設計
特別當a<b時,實現(xiàn)a-b比較困難從50年代開始,整數(shù)都采用補碼來表示但浮點數(shù)的尾數(shù)用原碼定點小數(shù)表示BinaryDecimal-0-1-2-3-4-5-6-710001001101010111100110111101111補碼特性-模運算(modular運算)時鐘是一種模12系統(tǒng)假定鐘表時針指向10點,要將它撥向6點,
有兩種撥法:①倒撥4格:10-4=6②順撥8格:10+8=18≡6(mod12)模12系統(tǒng)中:10-4≡10+8(mod12)-4≡8(mod12)-4的模12補碼等于8。同樣有-3≡9(mod12);-5≡7(mod12)等結論2:對于某一確定的模,數(shù)x減去小于模的數(shù)y,總可以用數(shù)x加上-y的補碼來代替。補碼(modular運算):實現(xiàn)+和–的統(tǒng)一
重要概念:在一個模運算系統(tǒng)中,一個數(shù)與它除以“?!焙蟮挠鄶?shù)等價。結論1:一個負數(shù)的補碼等于模減該負數(shù)的絕對值。(13mod12等于1,即13點鐘等于1點鐘)補碼的表示現(xiàn)實世界的模運算系統(tǒng)舉例例1:“鐘表”模運算系統(tǒng)假定時針只能順撥,從10點倒撥4格后是幾點?10-4=10+(12-4)=10+8=6(mod12)例2:“4位十進制數(shù)”模運算系統(tǒng)假定算盤只有四檔,且只能做加法,則在算盤上計算9828-1928等于多少?9828-1928=9828+(104-1928)=9828+8072=17900 =7900(mod104)取模即只留余數(shù),高位“1”被丟棄!相當于只有低4位留在算盤上。計算機中的運算器是模運算系統(tǒng)
8位二進制加法器模運算系統(tǒng)
計算01111111-01000000=?
01111111-01000000=01111111+(28-
01000000)=01111111+11000000=100111111(mod28)
=00111111只留余數(shù),1被丟棄結論1:一個負數(shù)的補碼等于對應正數(shù)補碼的“各位取反、末位加1”計算機中運算器只有有限位。假定為n位,則運算結果只能保留低n位,故可看成是個只有n檔的二進制算盤。所以,其模為2n。模為23計算機中的運算器是模運算系統(tǒng)計算機中的運算器是模運算系統(tǒng)當n=4時,共有16個機器數(shù):0000~1111,可看成是模為24的鐘表系統(tǒng)。真值的范圍為-8~+7補碼的定義假定補碼有n位,則:定點整數(shù):[X]補=2n+X(-2n≤X<2n
,mod2n)定點小數(shù):[X]補=2+X(-1≤X<1,mod2)注:實際上在計算機中并不使用補碼定點小數(shù)!無需掌握該知識點0000000110000010010011101111011101011010101111001101001101101001求特殊數(shù)的補碼②[-1]補=2n-0…01=11…1(n個1)(mod2n)假定機器數(shù)有n位①[-2n-1]補=2n-2n-1=10…0(n-1個0)(mod2n)④[+0]補=[-0]補=00…0(n個0)
32位機器中,int、short、char型數(shù)據(jù)的機器數(shù)各占幾位?注:計算機中并不會出現(xiàn)-1.0的補碼,這里只是想說明同一個真值在機器中可能有不同的機器數(shù)?、踇-1.0]補=2-1.0
=1.00…0(n-1個0)(mod2)補碼與真值之間的簡便轉換例:設機器數(shù)有8位,求123和-123的補碼表示。解:123=127–4=01111111B–100B=01111011B
–
123=–01111011B[01111011]補=28+01111011=100000000+01111011
=01111011(mod28),即7BH。
[–
01111011]補=28–01111011=100000000–01111011=11111111–01111011+1=10000100+1
=10000101,即85H。如何快速得到123的二進制表示?各位取反,末位加1當機器數(shù)為16位時,結果怎樣?
Two’sComplement(補碼的表示)正數(shù):符號位(signbit)為0,數(shù)值部分不變負數(shù):符號位為1,數(shù)值部分“各位取反,末位加1”+0和-0表示唯一變形(模4)補碼:雙符號,用于存放可溢出的中間結果。值太大,用4位補碼無法表示,故“溢出”!但用變形補碼可保留符號位和最高數(shù)值位。BitwiseInverse111111101101110010111010100110000111Decimal012345678補碼000000010010001101000101011001111000Decimal-0-1-2-3-4-5-6-7-8補碼000011111110110111001011101010011000變形補碼000000000100010000110010000101001100011101000變形補碼000001111111110111011110011011110101100111000如何求補碼的真值根據(jù)補碼各位上的“權”,可以求出一個補碼的值真值范圍:
令:[A]補=an-1an-2……
a1a0則:A=-an-1.2n-1+an-2.2n-2+
……
a1.21+
a0.20
符號為0,則為正數(shù),數(shù)值部分相同符號為1,則為負數(shù),數(shù)值各位取反,末位加1例如:補碼“11010110”的真值為:
-0101010=-(32+8+2)=-42Excess(biased)notion-移碼表示°什么是“excess(biased)notation-移碼表示”?
將每一個數(shù)值加上一個偏置常數(shù)(Excess/bias)°一般來說,當編碼位數(shù)為n時,bias取2n-1Ex.n=4:Ebiased=E+23(
bias=23=1000B)-8(+8)~0000B-7(+8)~0001B… 0(+8)~1000B …+7(+8)~1111B°為什么要用移碼來表示指數(shù)(階碼)?
便于浮點數(shù)加減運算時的對階操作(比較大?。├?.01x2-1+1.11x23簡化比較補碼:111<011?(-1)
(3)1.01x2-1+4+1.11x23+4
移碼:011<111
(3)
(7)移碼主要用來表示浮點數(shù)階碼!0的移碼表示唯一移碼和補碼僅第一位不同Unsignedinteger(無符號整數(shù))機器中字的位排列順序有兩種方式:(例:32位字:0…010112)高到低位從左到右:00000000000000000000000000001011高到低位從右到左:11010000000000000000000000000000Leftmost和rightmost這兩個詞有歧義,故用LSB(LeastSignificantBit)來表示最低有效位,用MSB來表示最高有效位高位到低位多采用從左往右排列一般在全部是正數(shù)運算且不出現(xiàn)負值結果的場合下,可使用無符號數(shù)表示。例如,地址運算,編號表示,等等無符號整數(shù)的編碼中沒有符號位能表示的最大值大于位數(shù)相同的帶符號整數(shù)的最大值(Why?)例如,8位無符號整數(shù)最大是255(11111111)而8位帶符號整數(shù)最大為127(01111111)總是整數(shù),所以很多時候就簡稱為“無符號數(shù)”MSBLSBSignedinteger(帶符號整數(shù),定點整數(shù))計算機必須能處理正數(shù)(positive)和負數(shù)(negative),MSB表示數(shù)符有三種定點編碼方式Signedmagnitude(原碼)
現(xiàn)用來表示浮點(實)數(shù)的尾數(shù)One’scomplement(反碼)現(xiàn)已不用于表示數(shù)值數(shù)據(jù)Two’scomplement(補碼)
50年代以來,所有計算機都用補碼來表示定點整數(shù)為什么用補碼表示帶符號整數(shù)?補碼運算系統(tǒng)是模運算系統(tǒng),加、減運算統(tǒng)一數(shù)0的表示唯一,方便使用比原碼和反碼多表示一個最小負數(shù)C語言程序中的整數(shù)關系表達式運算類型結果說明0==0U-1<0-1<0U2147483647>-2147483647-12147483647U>-2147483647-12147483647>(int)2147483648U-1>-2(unsigned)-1>-2無符號數(shù):unsignedint(short/long);帶符號整數(shù):int(short/long)常在一個數(shù)的后面加一個“u”或“U”表示無符號數(shù)C語言標準規(guī)定:若運算中同時有無符號和帶符號整數(shù),則按無符號整數(shù)運算假定以下關系表達式在32位用補碼表示的機器上執(zhí)行,結果是什么?C語言標準規(guī)定了各類型最小取值范圍,如:int型至少應為16位,取值范圍為-32768到32767,而int型數(shù)據(jù)具體的取值范圍則由ABI規(guī)范規(guī)定。C語言程序中的整數(shù)關系表達式類型結果說明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)帶*的結果與常規(guī)預想的相反!C語言程序中的整數(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位機器上運行上述代碼時,它的輸出結果是什么?為什么?x=4294967295=–1u=2147483648=–2147483648
因為–1的補碼整數(shù)表示為“11…1”,作為32位無符號數(shù)解釋時,其值為232–1=4294967296–1=4294967295。231的無符號數(shù)表示為“100…0”,被解釋為32位帶符號整數(shù)時,其值為最小負數(shù):–232-1=–231=–2147483648。C語言程序中的整數(shù)1)在有些32位系統(tǒng)上,C表達式-2147483648<2147483647的執(zhí)行結果為false。Why?2)若定義變量“inti=-2147483648;”,則“i<2147483647”的執(zhí)行結果為true。Why?3)如果將表達式寫成“-2147483647-1<2147483647”,則結果會怎樣呢?Why?1)在ISOC90標準下,2147483648為unsignedint型,因此
“-2147483648<2147483647”按無符號數(shù)比較,10……0B比01……1大,結果為false。
在ISOC99標準下,2147483648為longlong型,因此
“-2147483648<2147483647”按帶符號整數(shù)比較,10……0B比01……1小,結果為true。2)i<2147483647按int型數(shù)比較,結果為true。3)-2147483647-1<2147483647按int型比較,結果為true。由C語言中的“IntegerPromotion”整數(shù)類型提升規(guī)則決定的。編譯器處理常量時默認的類型C90 范圍類型0~231-1int231~232-1unsignedint232~263-1longlong263~264-1unsignedlonglongC99范圍類型0~231-1int231~263-1longlong263~264-1unsignedlonglong231=2147483648,機器數(shù)為:100┅0(31個0)C表達式類型轉換(整數(shù)類型提升規(guī)則)unsignedlonglong↑longlong↑unsigned↑
int↑(unsigned)char,short猜測執(zhí)行結果是什么?01C90上的運行結果是什么?C99的結果大家回去試試。Example:
mantissa(尾數(shù))exponent(階碼、指數(shù))
6.02x1021
decimalpoint
radix(base,基)°Normalizedform(規(guī)格化形式):小數(shù)點前只有一位非0數(shù)°同一個數(shù)有多種表示形式。例:對于數(shù)1/1,000,000,000?Normalized(唯一的規(guī)格化形式):1.0x10-9?Unnormalized(非規(guī)格化形式不唯一):0.1x10-8,10.0x10-10科學計數(shù)法(ScientificNotation)與浮點數(shù)
mantissa(尾數(shù))exponent(指數(shù))0.101two
x
2
-10
binarypoint基為2forBinaryNumbers:只要對尾數(shù)和指數(shù)分別編碼,就可表示一個浮點數(shù)(即:實數(shù))浮點數(shù)(FloatingPoint)的表示范圍例:畫出下述32位浮點數(shù)格式的規(guī)格化數(shù)的表示范圍。
018931
第0位數(shù)符S;第1~8位為8位移碼表示階碼E(偏置常數(shù)為128);第9~31位為24位二進制原碼小數(shù)表示的尾數(shù)數(shù)值部分M。規(guī)格化尾數(shù)的小數(shù)點后第一位總是1,故規(guī)定第一位默認的“1”不明顯表示出來。這樣可用23個數(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
因為原碼是對稱的,所以其表示范圍關于原點對稱。機器0:尾數(shù)為0或落在下溢區(qū)中的數(shù)浮點數(shù)范圍比定點數(shù)大,但數(shù)的個數(shù)沒變多,故數(shù)之間更稀疏,且不均勻
正下溢
負下溢
-
(1-2-24)
×2127
數(shù)軸
零
可表示的正數(shù)
可表示的負數(shù)
-2-129
0
2-129
(1-2-24)
×2127
正上溢
負上溢
+/-0.1xxxxx
×2E浮點數(shù)的表示°Normalformat(規(guī)格化數(shù)形式):
+/-1.xxxxxxxxxx
×RExponent°32-bit規(guī)格化數(shù):310
S
Exponent
Significand1bit?bits?bits
S
是符號位(Sign)
Exponent用移碼(增碼)來表示Significand表示xxxxxxxxxxxxx,尾數(shù)部分
(基可以是2/4/8/16,約定信息,無需顯式表示)°早期的計算機,各自定義自己的浮點數(shù)格式問題:浮點數(shù)表示不統(tǒng)一會帶來什么問題?“Father”oftheIEEE754standard現(xiàn)在所有計算機都采用IEEE754來表示浮點數(shù)1970年代后期,IEEE成立委員會著手制定浮點數(shù)標準1985年完成浮點數(shù)標準IEEE754的制定Prof.WilliamKahan
/~wkahan/ieee754status/754story.htmlThisstandardwasprimarilytheworkofoneperson,UCBerkeleymathprofessorWilliamKahan.
直到80年代初,各個機器內部的浮點數(shù)表示格式還沒有統(tǒng)一
因而相互不兼容,機器之間傳送數(shù)據(jù)時,帶來麻煩
IEEE754標準
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用來表示特殊值!為什么用127?若用128,則階碼范圍為多少?00000001(-127)~11111110(126)規(guī)格化數(shù):+/-1.xxxxxxxxxxtwox2Exponent規(guī)定:小數(shù)點前總是“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?前面的定義都是針對規(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的結果是+/-∞,不是溢出異常.(整數(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關于浮點數(shù)精度的一個例子
61.419998和61.420002是兩個可表示數(shù),兩者之間相差0.000004。當輸入數(shù)據(jù)是一個不可表示數(shù)時,機器將其轉換為最鄰近的可表示數(shù)。第一講小結在機器內部編碼后的數(shù)稱為機器數(shù),其值稱為真值定義數(shù)值數(shù)據(jù)有三個要素:進制、定點/浮點、編碼整數(shù)的表示無符號數(shù):正整數(shù),用來表示地址等;帶符號整數(shù):用補碼表示C語言中的整數(shù)無符號數(shù):unsignedint(short/long);帶符號數(shù):int(short/long)浮點數(shù)的表示符號;尾數(shù):定點小數(shù);指數(shù)(階):定點整數(shù)(基不用表示)浮點數(shù)的范圍正上溢、正下溢、負上溢、負下溢;與階碼的位數(shù)和基的大小有關浮點數(shù)的精度:與尾數(shù)的位數(shù)和是否規(guī)格化有關浮點數(shù)的表示(IEEE754標準):單精度SP(float)和雙精度DP(double)規(guī)格化數(shù)(SP):階碼1~254,尾數(shù)最高位隱含為1“零”(階為全0,尾為全0)∞(階為全1,尾為全0)NaN(階為全1,尾為非0)非規(guī)格化數(shù)(階為全0,尾為非0,隱藏位為0)十進制數(shù)的表示:用ASCII碼或BCD碼表示10在計算機中有幾種可能的表示?
-10呢?數(shù)據(jù)的表示和運算分以下兩個部分介紹第一講:數(shù)值數(shù)據(jù)的表示定點數(shù)的編碼表示整數(shù)的表示
無符號整數(shù)、帶符號整數(shù)浮點數(shù)的表示C語言程序的整數(shù)類型和浮點數(shù)類型第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存儲邏輯值、西文字符、漢字字符數(shù)據(jù)寬度單位大端/小端、對齊存放表示用一位表示。例如,真:1/假:0N位二進制數(shù)可表示N個邏輯數(shù)據(jù),或一個位串運算按位進行如:按位與/按位或/邏輯左移/邏輯右移等識別邏輯數(shù)據(jù)和數(shù)值數(shù)據(jù)在形式上并無差別,也是一串0/1序列,機器靠指令來識別。位串用來表示若干個狀態(tài)位或控制位(OS中使用較多)
例如,x86的標志寄存器含義如下:
邏輯數(shù)據(jù)的編碼表示CFPFAFZFSFTFIFDFOF特點是一種拼音文字,用有限幾個字母可拼寫出所有單詞只對有限個字母和數(shù)學符號、標點符號等輔助字符編碼所有字符總數(shù)不超過256個,使用7或8個二進位可表示表示(常用編碼為7位ASCII碼)十進制數(shù)字:0/1/2…/9英文字母:A/B/…/Z/a/b/…/z專用符號:+/-/%/*/&/……控制字符(不可打印或顯示)操作字符串操作,如:傳送/比較等
西文字符的編碼表示必須熟悉對應的ASCII碼!西文字符的編碼表示一個典型程序的轉換處理過程#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”預處理(cpp)編譯(cc1)匯編(as)鏈接(ld)printf.o計算機不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s匯編語言程序(文本)hello.o可重定位目標程序(二進制)hello可執(zhí)行目標程序(二進制)以下是GCC+Linux平臺中的處理過程特點漢字是表意文字,一個字就是一個方塊圖形。漢字數(shù)量巨大,總數(shù)超過6萬字,給漢字在計算機內部的表示、漢字的傳輸與交換、漢字的輸入和輸出等帶來了一系列問題。編碼形式有以下幾種漢字代碼:輸入碼:對漢字用相應按鍵進行編碼表示,用于輸入內碼:用于在系統(tǒng)中進行存儲、查找、傳送等處理字模點陣碼或輪廓描述:
描述漢字字模的點陣或輪廓,用于輸出
漢字及國際字符的編碼表示問題:西文字符有沒有輸入碼?有沒有內碼?有沒有字模點陣或輪廓描述?漢字內碼至少需2個字節(jié)才能表示一個漢字內碼。為什么?由漢字的總數(shù)決定!可在GB2312國標碼的基礎上產(chǎn)生漢字內碼為與ASCII碼區(qū)別,將國標碼的兩個字節(jié)的第一位置“1”后得到一種漢字內碼
如,漢字“大”在碼表中位于第20行、第83列。因此區(qū)位碼為00101001010011,國標碼為0011010001110011,即3473H前面的34H和字符“4”的ACSII碼相同,后面的73H和字符“s”的ACSII碼相同,將每個字節(jié)的最高位各設為“1”后,就得到其內碼:B4F3H(1011010011110011B),不會和ASCII碼混淆。區(qū)位碼→國標碼→內碼為便于打印、顯示漢字,漢字字形必須預先存在機內字庫(font):所有漢字形狀的描述信息集合不同字體(如宋體、仿宋、楷體、黑體等)對應不同字庫從字庫中找到字形描述信息,然后送設備輸出問題:如何知道到哪里找相應的字形信息?漢字內碼與其在字庫中的位置有關??!字形主要有兩種描述方法:字模的點陣描述(圖像方式)字模的輪廓描述(圖形方式)直線向量輪廓曲線輪廓(TrueType字形)漢字的字模點陣碼和輪廓描述數(shù)據(jù)的基本寬度比特(bit)是計算機中處理、存儲、傳輸信息的最小單位二進制信息的計量單位是“字節(jié)”(Byte),也稱“位組”現(xiàn)代計算機中,存儲器按字節(jié)編址字節(jié)是最小可尋址單位(addressableunit)如果以字節(jié)為一個排列單位,則LSB表示最低有效字節(jié),MSB表示最高有效字節(jié)除比特和字節(jié)外,還經(jīng)常使用“字”(word)作為單位“字”和“字長”的概念不同IA-32中的“字”有多少位?字長多少位呢?DWORD:32位QWORD:64位16位32位數(shù)據(jù)的基本寬度“字”和“字長”的概念不同“字長”指定點運算數(shù)據(jù)通路的寬度。(數(shù)據(jù)通路指CPU內部數(shù)據(jù)流經(jīng)的路徑以及路徑上的部件,主要是CPU內部進行數(shù)據(jù)運算、存儲和傳送的部件,這些部件的寬度基本上要一致,才能相互匹配。因此,”字長”等于CPU內部定點運算部件的位數(shù)、通用寄存器的寬度等。)“字”表示被處理信息的單位,用來度量數(shù)據(jù)類型的寬度。字和字長的寬度可以一樣,也可不同。例如,x86體系結構定義“字”的寬度為16位,但從386開始字長就是32位了。數(shù)據(jù)量的度量單位存儲二進制信息時的度量單位要比字節(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)用不同的度量方式,因而比較混亂為避免歧義,國際電工委員會(IEC)在1998年給出了表示2的冪次的二進制前綴字母定義數(shù)據(jù)量的度量單位硬盤和文件使用的單位不同的硬盤制造商和操作系統(tǒng)用不同的度量方式,因而比較混亂為避免歧義,國際電工委員會(IEC)給出了二進制前綴字母定義,可用不同的前綴表示所采用的度量方式程序中數(shù)據(jù)類型的寬度高級語言支持多種類型、多種長度的數(shù)據(jù)例如,C語言中char類型的寬度為1個字節(jié),可表示一個字符(非數(shù)值數(shù)據(jù)),也可表示一個8位的整數(shù)(數(shù)值數(shù)據(jù))不同機器上表示的同一種類型的數(shù)據(jù)可能寬度不同程序中的數(shù)據(jù)有相應的機器級表示方式和相應的處理指令C聲明典型32位機器CompaqAlpha機器charshortintintlongint12441248char*48floatdouble4848C語言中數(shù)值數(shù)據(jù)類型的寬度(單位:字節(jié))從表中看出:同類型數(shù)據(jù)并不是所有機器都采用相同的寬度,分配的字節(jié)數(shù)隨機器字長和編譯器的不同而不同。
CompaqAlpha是一個針對高端應用的64位機器,即字長為64位數(shù)據(jù)的存儲和排列順序80年代開始,幾乎所有通用機器都用字節(jié)編址ISA設計時要考慮的兩個問題:如何根據(jù)一個地址取到一個32位的字?-字的存放問題一個字能否存放在任何地址邊界?-字的邊界對齊問題例如,若inti=-65535,存放在內存100號單元(即占100#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國聚苯硫醚市場十三五規(guī)劃及投資風險評估報告
- 2025-2030年中國祛斑養(yǎng)顏保健品行業(yè)運行狀況及前景趨勢分析報告
- 2025-2030年中國電腦電源市場運行動態(tài)與營銷策略研究報告
- 邢臺學院《工程結構抗震設計原理》2023-2024學年第二學期期末試卷
- 湖北民族大學《數(shù)據(jù)庫原理及應用》2023-2024學年第二學期期末試卷
- 云南師范大學《電力系統(tǒng)分析》2023-2024學年第二學期期末試卷
- 武漢科技職業(yè)學院《動物試驗設計與統(tǒng)計分析》2023-2024學年第二學期期末試卷
- 四川藝術職業(yè)學院《針灸學(實驗)》2023-2024學年第二學期期末試卷
- 高考英語單詞3500分類記憶(精編版)
- 林規(guī)發(fā)〔2016〕58號防護林造林工程投資估算指標
- 非公開發(fā)行公司債券的法律意見書模版
- 汽車空調技術與維修教案
- 企業(yè)管理概論-課件全書課件完整版ppt全套教學教程最全電子教案電子講義(最新)
- 餐飲服務食品安全監(jiān)督量化分級動態(tài)等級評定檢查表
- 北師大版語文選修《蕭蕭》ppt課件1
- 大學生職業(yè)素養(yǎng)課件-5第五單元學會有效溝通-PPT課件
- 《談骨氣》課文閱讀(共2頁)
- 病原生物與免疫學(中職)緒論PPT課件
- 新起點小學英語一年級上冊單詞卡片(共23頁)
評論
0/150
提交評論