版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第五章數(shù)據(jù)類型1任何程序,不管以何種語言寫成,均可以視為刻劃了一個操作集合。并將以一定順序作用到一定數(shù)據(jù)上。語言的基本不同在于:允許的數(shù)據(jù)類型允許的操作類型控制操作順序的機(jī)制。2本章主要內(nèi)容數(shù)據(jù)類型的基本概念及相關(guān)屬性基本數(shù)據(jù)類型復(fù)合數(shù)據(jù)類型35.1類型和對象的性質(zhì)數(shù)據(jù)對象、變量和常量數(shù)據(jù)類型及其規(guī)約簡單數(shù)據(jù)類型的規(guī)約與實(shí)現(xiàn)數(shù)據(jù)對象的聲明類型檢查和類型轉(zhuǎn)換數(shù)據(jù)對象的初始化4數(shù)據(jù)對象計(jì)算機(jī)的數(shù)據(jù)存儲在結(jié)構(gòu)上是簡單的,通常是由位串構(gòu)成的字節(jié)。而語言虛擬機(jī)的數(shù)據(jù)存儲則有更復(fù)雜的組織,如:數(shù)組、棧、數(shù)、字符串、以及其它存在于程序執(zhí)行中不同點(diǎn)的數(shù)據(jù)。我們稱虛擬機(jī)上一個或多個數(shù)據(jù)片斷運(yùn)行時的組合為數(shù)據(jù)對象。5數(shù)據(jù)對象在程序運(yùn)行中,存在許多不同類型的不同數(shù)據(jù)對象。這些對象及其相互關(guān)系在運(yùn)行時動態(tài)變化。有些數(shù)據(jù)對象是程序員定義的,如變量、常量、數(shù)組、文件等。程序員通過聲明和語句顯式地創(chuàng)建和操作它們。有些數(shù)據(jù)對象是系統(tǒng)定義的,不可為程序員直接訪問。如:運(yùn)行時存儲棧、子程序激活記錄、文件緩沖、自由空間列表等。這些數(shù)據(jù)對象在運(yùn)行需要時自動產(chǎn)生,不需要時刪除。6數(shù)據(jù)對象標(biāo)量數(shù)據(jù)對象:Numeric(Integers,Real)BooleansCharactersEnumerations復(fù)合對象:StringPointer結(jié)構(gòu)化對象:ArraysRecordsListsSets抽象數(shù)據(jù)對象:Classes活動對象:TasksProcesses7數(shù)據(jù)對象數(shù)據(jù)對象表示了數(shù)據(jù)值的一個容器,是值被存放和檢索的地方,而數(shù)據(jù)值是在存儲器中以一種特定的位模式表示。數(shù)據(jù)對象和數(shù)據(jù)值在大多數(shù)語言中均是明確區(qū)分的,如圖所示。8數(shù)據(jù)對象每個數(shù)據(jù)對象有生命期,在生命期內(nèi)可用來存放數(shù)據(jù)值。數(shù)據(jù)對象可分為簡單數(shù)據(jù)對象和數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)—其他數(shù)據(jù)對象的聚集。數(shù)據(jù)對象在其生命期中涉及各種綁定,雖然其屬性不變,但綁定可動態(tài)改變。9數(shù)據(jù)對象:屬性和綁定重要的屬性和綁定有:1、類型通常在程序翻譯時,關(guān)聯(lián)數(shù)據(jù)對象和它可能的取值集合。2、位置通常不由程序員規(guī)定,而是系統(tǒng)存儲管理負(fù)責(zé)。3、值由賦值操作完成綁定。4、名通常在聲明時完成綁定,但可被子程序調(diào)用和返回修改5、部件通常用指針值相連,可通過指針的修改而變動。返回10變量和常量程序員通過變量來顯式地定義和命名數(shù)據(jù)對象。一個簡單的變量是有名字的簡單數(shù)據(jù)對象,其內(nèi)容可以發(fā)生變化。常量是具有名字的數(shù)據(jù)對象,其值在其生命期內(nèi)永久不變。一個文字(或文字常量)是一個常量,其名是其值的書寫表示,如21表示值為21的整數(shù)常量。程序員定義的常量——其名字由程序員指定。常量的綁定由編譯器完成。如C語言中,#defineMAX20語句MAX=4是非法的。返回11數(shù)據(jù)類型一個數(shù)據(jù)類型是一類數(shù)據(jù)對象加上創(chuàng)建及操作它們的一組操作。每個語言有一個基本數(shù)據(jù)類型集合,是語言固有的。有的語言還提供了設(shè)施允許程序員定義新數(shù)據(jù)類型。有的新語言還允許類型本身被語言操作(高階能力)。每個數(shù)據(jù)類型都包括對其相關(guān)性質(zhì)的規(guī)約以及在計(jì)算機(jī)中的具體實(shí)現(xiàn)12數(shù)據(jù)類型的規(guī)約數(shù)據(jù)類型的規(guī)約包括:1、區(qū)分該類型的數(shù)據(jù)對象的屬性2、該類型數(shù)據(jù)對象可具有的值3、定義該類型數(shù)據(jù)對象可能處理的操作例如:數(shù)組數(shù)據(jù)類型的規(guī)約屬性:維數(shù)、每維的下標(biāo)范圍、元素的數(shù)據(jù)類型等。值:形成數(shù)值元素有效值的數(shù)的集合。操作:選擇個體數(shù)組元素、創(chuàng)建數(shù)組、改變數(shù)組形狀,訪問下標(biāo)上下界、完成數(shù)組間的算術(shù)操作等。返回13數(shù)據(jù)類型的實(shí)現(xiàn)數(shù)據(jù)類型的實(shí)現(xiàn)包括:1、存儲表示:用于在計(jì)算機(jī)存儲器中表示數(shù)據(jù)對象。2、數(shù)據(jù)類型操作是以特殊的算法或過程表示的方式,這些算法和過程操縱數(shù)據(jù)對象的存儲表示。返回14數(shù)據(jù)類型的規(guī)約與實(shí)現(xiàn)從語法表示來看,規(guī)約和實(shí)現(xiàn)大體上獨(dú)立于特定的語法形式。屬性:表示為聲明或類型定義值:表示為文字或定義的常量操作:可由特殊的符號、固有過程或函數(shù)、或隱含地通過其他語言元素的特殊組合來調(diào)用。15基本(簡單)數(shù)據(jù)類型的規(guī)約簡單數(shù)據(jù)對象包含單個數(shù)據(jù)值,這類數(shù)據(jù)對象稱為基本數(shù)據(jù)類型。雖然不同的語言有不同的基本類型集合,但整數(shù)、實(shí)數(shù)、字符、布爾、枚舉、指針等基本都是有的。但各自精確的規(guī)約對不同語言會有差異。16簡單數(shù)據(jù)類型的規(guī)約:屬性數(shù)據(jù)對象的基本屬性(如類型和名字)通常在生命期中是不變的。有的屬性可存放在描述子中,作為數(shù)據(jù)對象的一部分在運(yùn)行時出現(xiàn)。有的屬性只用于確定其存儲表示,在執(zhí)行中不顯式地出現(xiàn)。屬性值和數(shù)據(jù)對象的值是不同的。17簡單數(shù)據(jù)類型的規(guī)約:值數(shù)據(jù)對象的類型確定了它可包含的可能值集,但在執(zhí)行中任一點(diǎn),只包含一個來自該集合的單值?;緮?shù)據(jù)類型定義的值集通常是有序集,有最小值和最大值。18簡單數(shù)據(jù)類型的規(guī)約:操作(1)操作確定數(shù)據(jù)對象被處理的方式。操作可能是原始操作,也可是用戶定義操作。操作是一個數(shù)學(xué)函數(shù),對一給定輸入?yún)?shù),有定義的、唯一確定的結(jié)果。每個操作有作用域、值域。操作的動作定義了對給定參數(shù)的結(jié)果。算法可用于刻劃操作的動作,但其他規(guī)約也是可以的。如可用乘法表來刻劃乘法的動作。19簡單數(shù)據(jù)類型的規(guī)約:操作(2)操作的基調(diào)(signature)——定義了操作的作用域中參數(shù)的數(shù)量、順序和類型,以及結(jié)果值域的順序和類型。數(shù)學(xué)記號:OP:type1×type2×…typentype—也稱為函數(shù)原形操作有單元、二元和多元。動作的精確規(guī)約需要比參數(shù)類型更多的信息。特別地,參數(shù)類型的存儲表示通常確定那些參數(shù)如何被操作,如:二進(jìn)制數(shù)的乘法和十進(jìn)制數(shù)的乘法有很大不同。這樣,在操作的規(guī)約中,常給出動作的非形式的描述。一旦參數(shù)的存儲表示確定,動作的精確規(guī)約是操作實(shí)現(xiàn)的一部分。20簡單數(shù)據(jù)類型的規(guī)約:操作(3)有時難于確定操作的精確規(guī)約為數(shù)學(xué)函數(shù),有四個主要因素。1、操作對某些輸入無定義。2、隱含的參數(shù)——操作會訪問其他隱含參數(shù)(全局變量;非局部變量)。3、副作用(隱含結(jié)果)——可能修改其他數(shù)據(jù)對象。4、自我修改(歷史敏感性)——操作修改自己的內(nèi)部結(jié)構(gòu)、或是執(zhí)行中保持的局部數(shù)據(jù)、或是代碼。操作的結(jié)果還依賴于歷史調(diào)用。例:隨機(jī)數(shù)產(chǎn)生器。LISP中可自我修改代碼。21基本數(shù)據(jù)類型的實(shí)現(xiàn)存儲表示基本類型的存儲受低層計(jì)算機(jī)的影響很大。如:整數(shù)或?qū)崝?shù)幾乎就是在低層硬件中使用的數(shù)的整數(shù)或浮點(diǎn)數(shù)表示。對字符值,硬件或操作系統(tǒng)字符碼被使用?;纠碛桑喝缡褂糜布鎯Ρ硎?,則該類型數(shù)據(jù)基本操作可以用硬件提供的基本操作實(shí)現(xiàn)。否則,將使用軟件仿真,從而帶來效率損失。22基本數(shù)據(jù)類型的實(shí)現(xiàn)基本數(shù)據(jù)類型的屬性被類似地處理。1、為了效率,很多語言設(shè)計(jì)為屬性由編譯器確定。屬性本身并不存放在運(yùn)行時存儲表示中——存儲表示通常直接使用硬件,如:C、Fortran、Pascal等。2、數(shù)據(jù)對象的屬性可存放在描述子中作為運(yùn)行時數(shù)據(jù)對象的一部分,如:LISP、Prolog等,這里靈活性是主要目標(biāo)。通常硬件不提供對描述子的直接表示。數(shù)據(jù)對象的表示通常獨(dú)立于存儲位置,這樣給定類型的每個對象有相同的表示(除位置不同),通常用需要的內(nèi)存塊的尺寸(大?。﹣砻枋?,同時也涉及屬性和值在塊中的布局。通常內(nèi)存塊的每一個字或字節(jié)的地址用于表示數(shù)據(jù)對象的位置。23基本數(shù)據(jù)類型的實(shí)現(xiàn)操作的實(shí)現(xiàn)1、直接作為硬件操作如:整數(shù)表示為硬件整數(shù),+,-也直接用硬件實(shí)現(xiàn)。2、作為過程或函數(shù)子程序如:平方根操作。如數(shù)據(jù)對象不使用硬件表示,則所有操作必須是軟件仿真,通常以子程序的形式。3、作為In-line(內(nèi)嵌)代碼序列。這也是操作的軟件實(shí)現(xiàn)形式,但不是使用短小的子程序,而是將子程序中操作代碼拷貝到程序中的調(diào)用點(diǎn)。返回24數(shù)據(jù)對象的聲明編寫程序時,程序員確定數(shù)據(jù)對象的名字和類型。還要確定:生命期、在程序中的活動范圍、相關(guān)操作等。聲明:一種程序語句,告知語言翻譯器關(guān)于數(shù)據(jù)對象的信息。如聲明語句放在特定的程序或類定義中,則指明了對象希望的生命期。聲明可以是顯式的,也可以是隱含的或缺省的。聲明可以為數(shù)據(jù)對象賦上初始值,也可指定常量值。25數(shù)據(jù)對象的聲明操作的聲明翻譯時需要的關(guān)于操作的信息,主要是其基調(diào)signature。對基本操作,不需顯式的參數(shù)類型和結(jié)果類型聲明,是語言中固有的。對程序員定義的操作,則必須指定之。如:sub:int×float→float
=>floatSub(intx,floaty)26聲明的目的1、選擇存儲表示聲明可以給語言翻譯器提供關(guān)于數(shù)據(jù)類型和數(shù)據(jù)對象屬性的信息,使得翻譯器可以確定數(shù)據(jù)對象的最佳的存儲表示,從而減少整體的存儲需求和被翻譯程序的執(zhí)行時間。2、存儲管理——聲明使其更為高效聲明可以提供關(guān)于數(shù)據(jù)對象生命期的信息,從而使得在程序執(zhí)行過程中進(jìn)行更高效的存儲管理。如:在C語言中,在子程序頭部聲明的數(shù)據(jù)對象有相同的生命期,這樣可以在進(jìn)入子程序時分配一個整體的塊來存放所有的數(shù)據(jù)對象,而在退出子程序時釋放。其它動態(tài)創(chuàng)建的數(shù)據(jù)對象則需單獨(dú)處理。27聲明的目的3、多態(tài)操作——包括重載和真正多態(tài)大多數(shù)語言均使用特殊的符號來表示一組不同的操作,具體操作的選擇將依賴于參數(shù)的數(shù)據(jù)類型。此即所謂重載。如:+可以是整數(shù)加、實(shí)數(shù)加,甚至可用于字符和字符串操作。重載是一個在語法層次上處理的概念。由編譯器處理。真正的多態(tài)通常是語義級別的概念,操作符的具體動作的確定是在運(yùn)行時進(jìn)行。如:函數(shù)語言中,類型可以作為參數(shù)帶入,從而使函數(shù)的動作的選擇依據(jù)類型實(shí)參而確定。恒等函數(shù)就是典型的多態(tài)。面向?qū)ο蟮睦^承機(jī)制也提供了所謂的包含多態(tài)性,即子類的對象可用于父類對象出現(xiàn)的地方。4、類型檢查——最重要的目標(biāo),屬語義檢查,目標(biāo)是排錯,分靜態(tài)或動態(tài)類型檢查。類型檢查提供了很好的防止錯誤的機(jī)制。返回28類型檢查和類型轉(zhuǎn)換計(jì)算機(jī)硬件固有的數(shù)據(jù)存儲表示通常不含類型信息。數(shù)據(jù)上的基本原始操作也不需類型檢查。如一個位串:111001……0011可能是整數(shù)、實(shí)數(shù)、字符串、或指令,沒有辦法來區(qū)分。硬件提供的基本操作(如加法),不能檢查其參數(shù)是否為整數(shù),他們僅僅是位串。匯編語言或機(jī)器語言編程中常見的錯誤源于錯誤的操作類型,這種錯誤難于發(fā)現(xiàn),因?yàn)椴僮鞑⒉灰悦黠@的方式失敗。操作可進(jìn)行,但結(jié)果沒有意義。有時這種錯誤可在連續(xù)的一串操作后出錯,有時程序停止也不出錯。29類型檢查類型檢查:指檢查程序中每個操作均接收了正確數(shù)目的正確類型參數(shù),可在運(yùn)行時完成,即動態(tài)類型檢查;或編譯時檢查,即靜態(tài)類型檢查。高級語言的主要優(yōu)點(diǎn)之一:可提供對所有(或幾乎所有)操作的類型檢查。30動態(tài)類型檢查需類型標(biāo)志,不需對變量聲明(即變量是無類型的)。優(yōu)點(diǎn):編程的靈活性。程序員不需考慮類型問題,具有較高靈活性。缺點(diǎn):程序難于調(diào)試,不能完全消去所有參數(shù)類型錯誤。程序測試不可能檢測所有的路徑。需要在執(zhí)行過程中保持類型信息,需存儲空間。動態(tài)檢查需以軟件實(shí)現(xiàn),有時間花銷。31靜態(tài)類型檢查需要的信息通常由程序員在聲明中及在其他語言結(jié)構(gòu)中提供。需要:1、對每個操作,其參數(shù)的數(shù)量、順序、類型及結(jié)果類型。2、對每個變量,被關(guān)聯(lián)的命名數(shù)據(jù)對象的類型。3、每個常量數(shù)據(jù)對象的類型。編譯器在翻譯的早期階段收集聲明中的類型信息,以后將用于類型檢查。靜態(tài)檢查涉及語言的多個方面:聲明、數(shù)據(jù)控制結(jié)構(gòu)、分開編譯等。32靜態(tài)與動態(tài)類型檢查靜態(tài)檢查將針對程序中的所有操作進(jìn)行,所有可能的執(zhí)行路徑均被檢查。因此,關(guān)于類型錯誤的進(jìn)一步測試是不需要的,因而不需類型標(biāo)記和運(yùn)行時類型檢查。在多數(shù)語言中,對某些語言結(jié)構(gòu)的靜態(tài)檢查在某種情況下是不可能的。解決方案:采用動態(tài)類型檢查或不檢查。33類型檢查強(qiáng)類型如果我們可以靜態(tài)地檢測程序中的所有類型錯誤,則稱語言是強(qiáng)賦類型的。通常類型為程序提供了一個安全層次。一個函數(shù)f:S→R稱為類型安全的,如果f的執(zhí)行不會產(chǎn)生R以外的值。類型安全的操作均不需動態(tài)檢查。很少有語言是真正強(qiáng)類型的。類型推導(dǎo)如果解釋不會出現(xiàn)二義性,則類型聲明可以省去??捎烧Z言實(shí)現(xiàn)推導(dǎo)出失去的類型信息。34類型轉(zhuǎn)換和類型的強(qiáng)制轉(zhuǎn)換如果在類型檢查中,參數(shù)的實(shí)際類型和操作期望的類型間出現(xiàn)不匹配,則有兩種處理方案:1、指出出錯2、通過強(qiáng)制(隱式的類型轉(zhuǎn)換)來改變實(shí)際參數(shù)的類型為正確類型。類型轉(zhuǎn)換的基調(diào)為:conversion-op:type1→type2將一個對象變?yōu)榱硪活愋偷膶ο?。大多?shù)語言以兩種方式提供類型轉(zhuǎn)換:1、作為固有函數(shù),程序員可顯式地調(diào)用。如:將實(shí)數(shù)變成整數(shù),Pascal中的round,C中的(int)x2、作為強(qiáng)制,自動在類型失配時調(diào)用。如:整數(shù)和實(shí)數(shù)間相加,總是先將整數(shù)轉(zhuǎn)變?yōu)閷?shí)數(shù)。35類型轉(zhuǎn)換和類型的強(qiáng)制轉(zhuǎn)換強(qiáng)制的基本原則是不失信息。這類強(qiáng)制稱為widening或promotion。如強(qiáng)制會丟失信息,則稱為變窄(narrowing)類型轉(zhuǎn)換可能需要數(shù)據(jù)對象在運(yùn)行時存儲表示的改變,如:COBOL和PL/1中,數(shù)值以字符串方式存放,要相加需先轉(zhuǎn)換,結(jié)果又要轉(zhuǎn)換為字符串。有的語言中不提供類型強(qiáng)制,類型不匹配即被視為出錯。而有的語言則盡可能在不匹配時采用強(qiáng)制(如C)。返回36賦值和初始化賦值是一基本操作,改變值到數(shù)據(jù)對象的綁定,這個改變是操作的副作用。有的語言中,賦值語句也返回值(作為表達(dá)式處理),該返回值包含被賦值拷貝的數(shù)據(jù)對象。Pascal中,賦值的規(guī)約為:Assignment(:=):integer1×integer2→eger2值賦給integer1無顯式返回。C中,規(guī)約為:Assignment(=):integer1×integer2→integer3integer2值的拷貝賦給integer1,同時創(chuàng)建并返回包含integer2值的新數(shù)據(jù)對象integer3.37賦值考慮賦值X:=X右邊的X稱右端值,用于引用包含在命名數(shù)據(jù)對象中的值,r-值。左邊的X用于引用將包含新值的數(shù)據(jù)對象的位置,稱為左值,l-值。賦值操作定義為:1、計(jì)算第一個操作數(shù)表達(dá)式的左值(存儲位置)。2、計(jì)算第二個操作數(shù)表達(dá)式的右值。3、將右值賦給左值對象。4、返回右值作為操作的結(jié)果。38賦值賦值的兩個不同視角(A=B)39初始化未初始化變量(或未初始化數(shù)據(jù)對象)是一個數(shù)據(jù)對象,已被創(chuàng)建,但未賦值,即有l(wèi)-值,但沒有r-值。創(chuàng)建對象僅涉及存儲塊的分配,塊中原有位模式不會改變。有的語言創(chuàng)建時不需初始化,初始化是在以后顯式地通過賦值進(jìn)行的。也可以在變量聲明時進(jìn)行顯式的初始化工作,此時,需要編譯器產(chǎn)生相應(yīng)的賦值代碼并插入到目標(biāo)程序中。在變量聲明后立即進(jìn)行初始化工作是程序員應(yīng)有的良好習(xí)慣之一。有的語言,創(chuàng)建時自動初始化(隱式初始化)。未初始化變量是程序錯誤的重要原因之一。返回405.2基本數(shù)據(jù)類型整數(shù)浮點(diǎn)實(shí)數(shù)定點(diǎn)實(shí)數(shù)枚舉布爾41數(shù)值數(shù)據(jù)類型:整數(shù)規(guī)約:整數(shù)類型的對象除了其類型外,通常沒有其它屬性。該類型的整數(shù)值的集合形成了數(shù)學(xué)中研究的無限整數(shù)集的一個在有限界內(nèi)的有序子集。最大整數(shù)值有時被表示為一個定義的常量,如:PASCAL中的maxint,其實(shí)際值由語言實(shí)現(xiàn)者根據(jù)具體的計(jì)算機(jī)硬件確定。C語言有四種不同的整數(shù)規(guī)約:int、short、long、char。42數(shù)值數(shù)據(jù)類型:整數(shù)(操作)整數(shù)數(shù)據(jù)對象上的操作:算術(shù)操作:二元算術(shù)操作的規(guī)約為:BinOp:integer×integer->integer二元操作包括:+、-、×、/、mod等。一元算術(shù)操作的規(guī)約為:UnaryOp:integer->integer一元操作有:-、+、以及其它,如:絕對值。43數(shù)值數(shù)據(jù)類型:整數(shù)(操作)關(guān)系操作:RelOp:integer×integer->Boolean關(guān)系操作有:大于、小于、相等、不等、等等賦值:assignment:integer×integer->voidassignment:integer×integer->integer位操作:也分二元和一元。如:&、|、<<(移位)等。44數(shù)值數(shù)據(jù)類型:整數(shù)(實(shí)現(xiàn))語言定義的整數(shù)數(shù)據(jù)類型經(jīng)常使用硬件定義的整數(shù)存儲表示和硬件提供的算術(shù)及關(guān)系操作來實(shí)現(xiàn)。通常使用一個完整的字來存儲一個整數(shù)。三種可能的整數(shù)存儲表示:需聲明及靜態(tài)類型檢查,如C、FORTRAN等語言仍可使用硬件提供的算術(shù)操作省空間,但需附加的操作處理返回45數(shù)值數(shù)據(jù)類型:浮點(diǎn)實(shí)數(shù)(規(guī)約)通常規(guī)約為單個類型屬性real或float,形成一個從硬件確定的最小負(fù)數(shù)到最大數(shù)的有序序列,但其值不是均勻地散布在這個范圍內(nèi)。此外,有的語言中,浮點(diǎn)數(shù)所需精度,即其所用的十進(jìn)制位數(shù),可由程序員來確定。實(shí)數(shù)具有和整數(shù)相同的算術(shù)、關(guān)系和賦值操作,但布爾操作有時會受限。由于進(jìn)位的關(guān)系,實(shí)數(shù)間的相等是很難達(dá)到的,因此使用實(shí)數(shù)相等為判定條件必須慎重。此外,大多數(shù)語言提供一些固有函數(shù)作為實(shí)數(shù)上的其它操作:Sin:real->realMax:real×real->real46數(shù)值數(shù)據(jù)類型:浮點(diǎn)實(shí)數(shù)(實(shí)現(xiàn))浮點(diǎn)實(shí)數(shù)的存儲表示通?;诘讓拥挠布硎荆渲写鎯ξ恢帽环譃槲矓?shù)和指數(shù)。在大多數(shù)語言實(shí)現(xiàn),IEEE標(biāo)準(zhǔn)754被用為浮點(diǎn)數(shù)定義的標(biāo)準(zhǔn)。有單精度和雙精度浮點(diǎn)數(shù)之分。二者通常由硬件算術(shù)操作支持其加、減、乘、除,而求冪操作通常由軟件仿真。如果同時支持單精度和雙精度,則必須給予程序員相應(yīng)的聲明機(jī)制。返回47數(shù)值數(shù)據(jù)類型:定點(diǎn)實(shí)數(shù)(規(guī)約)大多數(shù)硬件包含了整數(shù)和浮點(diǎn)數(shù)對象,然而,有很多應(yīng)用需要特定的有理數(shù),如:表示錢的元和分的數(shù)據(jù)對象。這些數(shù)不能寫成整數(shù)或浮點(diǎn)數(shù)。因此,需要定點(diǎn)數(shù)。定點(diǎn)數(shù)表示為固定長度的數(shù)位,在給定位置為小數(shù)點(diǎn)。如,COBOL語言中,有如下聲明:
XPICTURE999V9948數(shù)值數(shù)據(jù)類型:定點(diǎn)實(shí)數(shù)(實(shí)現(xiàn))定點(diǎn)實(shí)數(shù)可直接由硬件支持或用軟件仿真。如PL/1中,DECLAREXFIXEDDECIMAL(10,3),
YFIXEDDECIMAL(10,2),
ZFIXEDDECIMAL(10,2);X為帶3個小數(shù)位的十位十進(jìn)制數(shù),Y和Z有兩個小數(shù)位。X的比例因子SF為3,Y和Z為2。value(X)=rvalue(X)×10-SF即,X值為103.421,其右值為103421??紤]語句:Z=X+Y實(shí)際加法的代碼為:Z=(X+10×Y)/10考慮X×Y,則:積=rvalue(X)×rvalue(Y)SF=SF(X)+SF(Y),SF為小數(shù)點(diǎn)位置49數(shù)值數(shù)據(jù)類型:實(shí)數(shù)的不同表示實(shí)數(shù)1.5的不同表示返回50基本數(shù)據(jù)類型:枚舉類型我們通常希望一個變量只在一組符號值中選一值。如:變量StudentClass只有四種可能值:freshman,sophomore,junior,和senior。當(dāng)然,可以用整數(shù)來代表這四者,但必須由程序員來維護(hù)這類變量的操作安全性及使用的類型正確性。規(guī)約:枚舉是一個不同值的有序列表,由程序員確定其文字名及它們的順序。如C中:
Emun
StudentClass{Fresh,Soph,Junior,Senior};
Emun
EmploySex{Male,Female};51基本數(shù)據(jù)類型:枚舉類型(實(shí)現(xiàn))枚舉類型的基本操作為關(guān)系操作、賦值,以及后繼和前驅(qū)。實(shí)現(xiàn):枚舉類型數(shù)據(jù)對象的存儲表示是直接的,在枚舉序列中的每個值在運(yùn)行時被表示為整數(shù),通常為0、1、2、…之一。有的語言也可由程序員指定值。枚舉類型上的操作的實(shí)現(xiàn)也是直接的,直接使用硬件提供的基本操作。返回52基本數(shù)據(jù)類型:布爾類型大多數(shù)語言提供數(shù)據(jù)類型表示true和false,通常稱為布爾或邏輯類型。規(guī)約:布爾類型的數(shù)據(jù)對象取二值之一。在某些語言中,可將其考慮為語言定義的枚舉類型。
TypeBoolean=(false,true);其順序?yàn)閒alse<true。布爾類型對象上的操作為一般的邏輯操作。53基本數(shù)據(jù)類型:布爾類型(實(shí)現(xiàn))實(shí)現(xiàn):布爾數(shù)據(jù)對象的存儲表示是一個二進(jìn)制位。通常,為了可以直接訪問,而表示為單個可編址單元。用一個特殊位來表示,0為假,1為真?;蛘?,0為假,其余非零值為真。也有其它數(shù)據(jù)類型可用于布爾型的表示,而C中沒有布爾型。返回545.3復(fù)合數(shù)據(jù)類型字符串指針文件55字符串字符串是一個字符構(gòu)成的序列。幾乎所有的語言均有字符串類型。規(guī)約和語法:至少有三種不同的字符串類型處理方式:1、固定聲明長度。在程序中聲明字符串對象的固定長度。賦給該對象的值總是該長度的字符串。新串值賦給該數(shù)據(jù)對象將導(dǎo)致長度調(diào)整:減短或補(bǔ)足。PASCAL和COBOL中常采用此技術(shù)。56字符串2、有界變長。字符串?dāng)?shù)據(jù)對象具有固定的最大長度,但實(shí)際的字符串值長度可以小于此,甚至是空串。執(zhí)行過程中,字符串長度會發(fā)生變化,但超長時需減短。3、無界長度。字符串?dāng)?shù)據(jù)對象可以具有任意長度,而且長度可以在執(zhí)行過程中動態(tài)地?zé)o界變化。前兩種方法允許翻譯時確定每個字符串?dāng)?shù)據(jù)對象的存儲分配。第三種方法需要存儲的運(yùn)行時動態(tài)分配。57字符串:操作(1)1、串聯(lián)將兩個字符串連接在一起以形成一個長串。如:“BLOCK”||“HEAD”產(chǎn)生“BLOCKHEAD”。2、串上的關(guān)系操作包括一般的相等、大于、小于等均可用于字符串。由于字符本身是有序的,因此可以擴(kuò)展形成字符串的字典序。3、使用定位下標(biāo)的子串選擇很多語言提供了選擇子串的操作。如:FORTRAN中,NEXT=STR(6:10)將STR中從位置6到10的5個字符賦給NEXT。如果允許子串選擇出現(xiàn)在賦值的兩邊,則其語義必須仔細(xì)定義。58字符串:操作(2)4、I/O格式程序設(shè)計(jì)語言中提供的某些字符串操作常常是為了幫助輸出數(shù)據(jù)的格式化或?qū)⒏袷交妮斎肓鞣纸绯尚〉臄?shù)據(jù)單元。如:C和FORTRAN中的格式化I/O特性。5、使用模式匹配的子串選擇由于不知道子串在大串中的位置,模式匹配則成為一種重要的方法。如:SNOBOL4就提供了強(qiáng)大的模式匹配操作。59字符串:實(shí)現(xiàn)三種不同的方法使用不同的存儲表示。對固定長度的字符串操作可以有硬件支持。其它方式則需要軟件仿真。返回60指針通常,不是引入一系列可變長的鏈接數(shù)據(jù)對象類型,而是提供設(shè)施來允許使用指針將數(shù)據(jù)對象鏈接在一起而形成某種結(jié)構(gòu),這樣需要如下幾個語言特性:1、基本數(shù)據(jù)類型-指針(pointer),也稱引用或訪問類型。指針對象包含另一個數(shù)據(jù)對象的位置(左值),空指針為nil或null。2、定長數(shù)據(jù)對象的創(chuàng)建操作創(chuàng)建操作分配一個存儲塊,并返回其左值,可用于存放對象的右值。這種創(chuàng)建操作和聲明創(chuàng)建方式有兩個差別:a.數(shù)據(jù)對象不需要名字b.可在程序執(zhí)行中任何位置創(chuàng)建3、取引用操作允許跟隨指針到其指向的對象。61指針數(shù)據(jù)類型:規(guī)約指針數(shù)據(jù)類型定義一類數(shù)據(jù)對象,它們的值是其它數(shù)據(jù)對象的位置。指針類型的對象有兩種處理方式:1、指針只能引用單個類型的數(shù)據(jù)對象。如C、PASCAL和Ada等語言,需要進(jìn)行指針類型聲明和相應(yīng)的靜態(tài)類型檢查。2、指針可以引用任意類型的數(shù)據(jù)對象。如:SMALLTALK語言,數(shù)據(jù)對象本身帶有描述子,需要進(jìn)行動態(tài)類型檢查。也可以不進(jìn)行類型檢查。62指針數(shù)據(jù)類型:操作創(chuàng)建操作為一定長數(shù)據(jù)對象分配存儲空間,并創(chuàng)建指向該新數(shù)據(jù)對象的指針,該指針可以存放到指針數(shù)據(jù)對象中。如:PASCAL和Ada中的new,C中的系統(tǒng)函數(shù)malloc。選擇操作允許跟蹤指針值以達(dá)到指定的數(shù)據(jù)對象。因?yàn)橹羔樖瞧胀ǖ臄?shù)據(jù)對象,指針數(shù)據(jù)對象本身也可以用一般的選擇機(jī)制。如:*用于取指針的右值,并將其變成左值,用左值訪問數(shù)據(jù)。63指針數(shù)據(jù)類型:實(shí)現(xiàn)指針數(shù)據(jù)對象被表示為存儲位置(包含另一個存儲位置的地址,該地址是表示該指針指向的數(shù)據(jù)對象的存儲塊的基地址)。指針值的兩種存儲表示:1、絕對地址:指針值可以表示為數(shù)據(jù)對象所在存儲塊的實(shí)際存儲地址。2、相對地址:指針值可以表示為從某基地址開始的位移量。數(shù)據(jù)對象是被分配在一個大的存儲堆中。64指針數(shù)據(jù)類型:實(shí)現(xiàn)當(dāng)使用絕對地址時,由創(chuàng)建操作創(chuàng)建的數(shù)據(jù)對象可以分配在存儲區(qū)中的任意地方,通常,該分配發(fā)生在一個存儲堆區(qū)域中。使用絕對地址的選擇操作將更為高效,因?yàn)橹羔樦堤峁┝酥苯拥脑L問。缺點(diǎn)是存儲管理更為困難,因?yàn)閿?shù)據(jù)對象不能隨意在存儲中移動,存儲的回收必須逐個進(jìn)行。使用相對地址需要一個存儲塊的初始分配,可以是每種類型各有一個區(qū)域,也可以是所有數(shù)據(jù)對象共有一個區(qū)域。每個區(qū)域管理為一個堆。缺點(diǎn)是選擇操作需要更大的代價,優(yōu)點(diǎn)是存儲塊可以整體任意移動,整個區(qū)域可以處理為一個數(shù)據(jù)對象。返回65文件和I/O文件是一種數(shù)據(jù)結(jié)構(gòu),具有兩個特殊性質(zhì):1、通常表示在外存上,比其它數(shù)據(jù)類型也要大得多。2、生命期長,通常會跨越創(chuàng)建它的程序的生命期而存在。順序文件是最常見的文件類型。很多語言也提供直接訪問文件和索引順序文件。文件的兩種常見用途:針對外部操作環(huán)境的數(shù)據(jù)輸入和輸出。作為數(shù)據(jù)的臨時存儲,以解決高速內(nèi)存不足的問題。文件的部件稱為記錄。但有別于記錄類型。66順序文件順序文件是相同類型部件的線性序列,其長度可變且沒有固定的最大上界。(當(dāng)然,受外存大小限制)一個典型的PASCAL聲明:
Master:fileofEmployeeRec;文件部件的類型可以是基本類型,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 迪士尼樂園課件
- 租房半年鑒合同(2篇)
- 裝修類承包合同范本(2篇)
- 人教A版河北省衡水中學(xué)2023-2024學(xué)年高二下學(xué)期第二次綜合素養(yǎng)評價數(shù)學(xué)試題
- 社戲課件 圖文
- 實(shí)數(shù)課件湘教版
- 第22課《夢回繁華》八年級語文上冊精講同步課堂(統(tǒng)編版)
- 亨利詹姆斯課件
- 幼兒園小班音樂《春天天氣真好》課件
- 轉(zhuǎn)成課件 打印
- 我的家鄉(xiāng)吉林課件
- 中國竹文化 知到智慧樹網(wǎng)課答案
- 云南開放大學(xué)學(xué)前兒童社會教育離線作業(yè)1-4
- 寫作與溝通智慧樹知到期末考試答案章節(jié)答案2024年杭州師范大學(xué)
- 2023全國大學(xué)生網(wǎng)絡(luò)安全知識競賽題庫及答案大全
- 新課標(biāo)“物聯(lián)網(wǎng)實(shí)踐與探索”模塊教學(xué)設(shè)計(jì)與實(shí)施
- 大學(xué)生職業(yè)生涯規(guī)劃書工業(yè)機(jī)器人技術(shù)專業(yè)
- 某裝配式整體混凝土結(jié)構(gòu)監(jiān)理實(shí)施細(xì)則
- 《中華民族多元一體格局》
- 《心理統(tǒng)計(jì)學(xué)》練習(xí)題庫
- 金融資產(chǎn)投資合作協(xié)議
評論
0/150
提交評論