什么是數據類型
編輯在計算機科學和計算機編程中,數據類型或簡單的類型是數據的一個屬性,它告訴編譯器或解釋器程序員打算如何使用數據。大多數編程語言支持整數(大小不同)、浮點數(近似實數)、字符和布爾值的基本數據類型。數據類型約束表達式的值,例如變量或函數,可能需要。此數據類型定義了可以對數據執行的操作、數據的含義以及存儲該類型值的方式。數據類型提供一組值,表達式(即變量、函數等)可以從中獲取其值。
概念
編輯數據類型在類型系統中使用,類型系統提供了定義、實現和使用它們的各種方法。不同的類型系統確保不同程度的類型安全。
幾乎所有的編程語言都明確包含數據類型的概念,盡管不同的語言可能使用不同的術語。
常見的數據類型包括:
- 整數
- 浮點數字
- 布爾值
例如,在Java編程語言中,int類型表示值從-2,147,483,648到2,147,483,647的32位整數集合,以及可以對整數執行的運算,例如加法、減法和乘法。另一方面,顏色可能由三個字節表示,分別表示紅色、綠色和藍色的數量,以及一個表示顏色名稱的字符串。
大多數編程語言還允許程序員定義額外的數據類型,通常是通過組合其他類型的多個元素并定義新數據類型的有效操作。例如,程序員可能會創建一個名為“復數”的新數據類型,其中包括實部和虛部。數據類型還表示對類型系統中數據解釋的約束,描述存儲在計算機內存中的值或對象的表示、解釋和結構。類型系統使用數據類型信息來檢查訪問或操作數據的計算機程序的正確性。
數據類型類
編輯原始數據類型
原始數據類型通常是語言實現的內置或基礎類型。
機器數據類型
基于數字電子的計算機中的所有數據都表示為最低級別的位(替代0和1)。數據的最小可尋址單元通常是一組稱為字節的位(通常是一個八位字節,即8位)。由機器代碼指令處理的單元稱為字(截至2011年,通常為32或64位)。用于浮點算術的浮點數對字中的位使用不同的解釋。
機器數據類型需要在系統或低級編程語言中公開或可用,允許對硬件進行細粒度控制。的C編程語言,例如,建筑材料整數類型不同的寬度,如和。如果目標平臺上不存在相應的本機類型,編譯器將使用確實存在的類型將它們分解為代碼。例如,如果在16位平臺上請求一個32位整數,編譯器會默認將其視為兩個16位整數的數組。shortlong
在更高級別的編程中,機器數據類型通常被隱藏或抽象為一個實現細節,如果暴露,會使代碼的可移植性降低。例如,numeric可能會提供泛型類型而不是某些特定位寬的整數。
布爾類型
在布爾類型代表的價值觀真和假。盡管只有兩個值是可能的,但出于效率原因,它們很少被實現為單個二進制數字。許多編程語言沒有明確的布爾類型,而是將(例如)0解釋為false,將其他值解釋為true。布爾數據是指如何將語言解釋為機器語言的邏輯結構。在這種情況下,布爾值0指的是邏輯False。True總是非零,尤其是被稱為布爾值1的一。
枚舉
該枚舉類型具有不同的值,其可以被比較和分配,但不一定必須在計算機的存儲器中的任何特定的具體表示;編譯器和解釋器可以任意表示它們。例如,一副撲克牌中的四個花色可能是名為CLUB、DIAMOND、HEART、SPADE的四個枚舉數,屬于一個名為suit的枚舉類型。如果變量V被聲明為具有花色作為它的數據類型,可以將這四個值中的任何一個賦值給它。一些實現允許程序員為枚舉值分配整數值,甚至將它們視為與整數類型等效的。
數字類型
如:
- 的整數數據類型,或“非分數”。可以根據它們包含負值的能力進行子類型化(例如unsigned在C和C++中)。也可具有小的預定義數目的亞型(如short和long在C/C++);或允許用戶自由定義子范圍,例如1..12(例如Pascal/Ada)。
- 浮點數據類型通常將值表示為高精度分數值(有理數,數學上),但有時會誤導性地稱為實數(令人聯想到數學實數)。它們通常對xxx值和精度都有預定義的限制。通常以a×2b的形式在內部存儲(其中a和b是整數),但以熟悉的十進制形式顯示。
- 定點數據類型便于表示貨幣值。它們通常在內部實??現為整數,從而導致預定義的限制。
- Bignum或任意精度數字類型缺乏預定義的限制。它們不是原始類型,出于效率原因很少使用。
復合類型
復合類型派生自多個原始類型。這可以通過多種方式完成。它們組合的方式稱為數據結構。構成一個基本類型為化合物類型通常導致新類型,例如陣列的整數是一個不同類型的整數。
- 一個陣列(也稱為載體,列表,或序列)的存儲數量的元件,并提供隨機接入到單個元件。數組的元素通常(但并非在所有上下文中)需要具有相同的類型。數組可以是固定長度的或可擴展的。數組中的索引通常需要是來自特定范圍的整數(如果不是,可以通過談論關聯數組來強調這種放松)(如果該范圍內的所有索引并非都對應于元素,則它可能是一個稀疏數組)。
- 記錄(也稱為元組或結構)記錄是最簡單的數據結構之一。記錄是包含其他值的值,通常采用固定數量和順序,通常按名稱索引。記錄的元素通常稱為字段或成員。
- 聯盟。聯合類型定義將指定許多允許的原始類型中的哪些可以存儲在其實例中,例如“浮點數或長整數”。與記錄相反,記錄可以定義為包含一個浮點數和一個整數;而在聯合中,一次只允許一種類型。
- 甲標簽聯合(也稱為變體,變體記錄,識別聯合,或不相交并)包含一個附加的字段,指示其當前型增強型安全性。
- 甲集是一個抽象的數據結構可以存儲某些值,沒有任何特別的順序,并且不重復的值。值本身不是從集合中檢索的,而是測試成員資格的值以獲得布爾值“in”或“notin”。
- 一個對象包含許多數據字段,如記錄,以及許多用于訪問或修改它們的子程序,稱為方法。
許多其他的都是可能的,但它們往往是上述的進一步變體和化合物。例如,鏈表可以存儲與數組相同的數據,但提供順序訪問而不是隨機訪問,并且由動態內存中的記錄組成;雖然可以說是一種數據結構而不是類型本身,但它也很常見且足夠獨特,因此在復合類型的討論中包含它是合理的。
字符串和文本類型
如:
- 一個字符,可能是某個字母表中的一個字母、一個數字、一個空格、一個標點符號等。
- 一個字符串,它是一個字符序列。字符串通常用于表示單詞和文本,盡管除了最瑣碎的情況外,所有文本都不僅僅涉及字符序列。
字符和字符串類型可以存儲字符集(例如ASCII)中的字符序列。由于大多數字符集都包含數字,因此可以使用數字字符串,例如"1234".但是,許多語言將它們視為屬于與數值不同的類型1234。
根據所需的字符“寬度”,字符和字符串類型可以有不同的子類型。最初的7位寬ASCII被發現是有限的,并被8位和16位集取代,它們可以編碼各種各樣的非拉丁字母(如希伯來語和中文)和其他符號。字符串可以是適合拉伸的,也可以是固定大小的,即使是在相同的編程語言中也是如此。它們也可以按其xxx大小進行子類型化。
注意:字符串不是所有語言中的原始數據類型。例如,在C中,它們由字符數組組成。
抽象數據類型
任何沒有詳細說明數據的具體表示的數據類型都是抽象數據類型。相反,使用基于數據類型操作的正式規范來描述它。任何規范的實現都必須滿足給定的規則。抽象數據類型用于形式語義和程序驗證,并且不太嚴格地用于設計。
除了驗證之外,規范可能會立即變成實現。例如,OBJ系列編程語言基于此選項,使用方程進行規范并重寫以運行它們。代數規范是1980年左右CS的一個重要研究課題,幾乎是當時抽象數據類型的同義詞。它具有通用代數的數學基礎。通過允許其他公式而不僅僅是方程,可以使規范語言更具表現力。
一個典型的例子是list、bag和set數據類型的層次結構。所有這些數據類型都可以通過三個操作聲明:null,它構造空容器,single,它從單個元素構造一個容器,append,它組合了兩個相同類型的容器。然后,可以通過對這些操作的以下規則來給出三種數據類型的完整規范:
-null是左右中性:追加(空,A)=A,追加(A,空)=A。-對于列表,append是關聯的:追加(追加(A,B),C)=追加(A,追加(B,C))。-袋子增加交換性:追加(B,A)=追加(A,B)。-最后,集合也是冪等的:追加(A,A)=A。
可以通過以下方式指定對數據的訪問,例如這些容器的成員函數:
-成員(X,單(Y))=eq(X,Y)-成員(X,空)=假-成員(X,append(A,B))=or(member(X,A),member(X,B))
其他類型
類型可以基于或派生自上述基本類型。在某些語言(例如C)中,函數具有從其返回值的類型派生的類型。
指針和參考文獻
主要的非復合派生類型是指針,這是一種數據類型,其值直接引用(或“指向”)使用其地址存儲在計算機內存中其他位置的另一個值。它是一種原始的參考。(在日常生活中,一本書的頁碼可以被認為是引用另一本書的一段數據)。指針通常以類似于整數的格式存儲;但是,嘗試取消引用或“查找”其值永遠不是有效內存地址的指針會導致程序崩潰。為了改善這個潛在問題,即使底層表示相同,指針也被視為指向它們指向的數據類型的單獨類型。
函數類型
雖然也可以為函數分配類型,但在本文的設置中,它們的類型不被視為數據類型。在這里,數據被視為與算法相對。在編程中,函數與后者密切相關。但是因為通用數據處理的核心動機是算法可以表示為數據,例如文本描述和二進制程序,數據和功能的對比是有限的。相反,函數也可用于編碼數據。許多當代類型系統強烈關注函數類型,許多現代語言將函數解釋為一等公民。
從概念上將函數從主題中排除在相關領域并不少見。例如,謂詞邏輯不允許在函數或謂詞名稱上應用量詞。
元類型
一些編程語言將類型信息表示為數據,從而實現類型自省和反射。相反,高階類型系統雖然允許從其他類型構造類型并將它們像值一樣通過函數傳遞,但通常避免基于它們進行計算決策。
實用程序類型
為方便起見,高級語言可能提供現成的“現實世界”數據類型,例如時間、日期和貨幣值以及內存,即使語言允許從原始類型構建它們。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/124585/