數據類型

數據類型

數據類型數據結構中的定義是一組性質相同的值的集合以及定義在這個值集合上的一組操作的總稱。

變數是用來存儲值的所在處,它們有名字和數據類型。變數的數據類型決定了如何將代表這些值的位存儲到計算機的記憶體中。在聲明變數時也可指定它的數據類型。所有變數都具有數據類型,以決定能夠存儲哪種數據。

數據類型包括原始類型、多元組、記錄單元、代數數據類型、抽象數據類型、參考類型以及函式類型。

基本介紹

  • 中文名:數據類型
  • 外文名:data type
  • 定義:值的集合
  • 作用:把數據分成所需記憶體大小的數據
定義,種類,數字型,位元組型,文本型,操作方法,轉換,定植,

定義

計算機中,以(0 或 1)表示數據。數據的最小的定址單位稱為位元組(通常是八位)。機器碼指令處理的單位,稱作字長。大部分對字長的指令解譯,主要以二進制為主,如一個 32 位的字長,可以表示從0至2的32次方減1的無符號整數值,或者表示從負的2的32次方至2的32次方減1的有符號整數值。存在著特殊的算術指令,對字長中的位使用不同的解釋,以此作為浮點數
數據類型的出現是為了把數據分成所需記憶體大小不同的數據,編程的時候需要用大數據的時候才需要申請大記憶體,就可以充分利用記憶體。 例如大胖子必須睡雙人床,就給他雙人床,瘦的人單人床就夠了。
根據預設規定,如果在聲明中沒有說明數據類型,則令變數的數據類型為 Variant。Variant 數據類型很像一條變色龍— 它可在不同場合代表不同數據類型。當指定變數為 Variant 變數時,不必在數據類型之間進行轉換,Visual Basic 會自動完成各種必要的轉換。
但是,如果知道變數確實總是存儲特定類型的數據,並且還聲明了這種特定類型的變數,則 Visual Basic 會以更高的效率處理這個數據。例如,存儲人名的變數最好表示成 String 數據類型,因為名字總是由字元組成。
變數外,數據類型也用於其它場合。在給屬性賦值時,這個值就有數據類型;函式的參數也有數據類型。事實上,在 Visual Basic 中,凡是與數據有關的東西就與數據類型有關。
聲明變數
  • 在使用非 Variant 變數之前,必須使用 Private、Public、Dim 或 Static 語句變數聲明為 As type。例如,下列語句分別聲明了 Integer、Double、String 和 Currency 類型的變數
PrivateIAsIntegerDimAmtAsDoubleStaticYourNameAsStringPublicBillsPaidAsCurrency
  • 一個聲明語句可將多個聲明組合起來,請看下列語句:
PrivateIAsInteger,AmtAsDoublePrivateYourNameAsString,BillsPaidAsCurrencyPrivateTest,Amount,JAsInteger'注意,在這裡Test和Amount是Variant數據類型,只有J是Integer數據類型
注意 如果不提供數據類型,則指定變數為預設類型。如上例中注釋已說明,如果由於其它程式語言的經驗使人感到同一個聲明語句中的所有變數都有相同的指定數據類型(此例中為 Integer),那么,此處的結果可能會令人感到新鮮。

種類

數字型

Visual Basic 支持幾種 Numeric 數據類型— Integer(整型)、Long(長整型)、Single(單精度浮點型)、Double(雙精度浮點型)和 Currency(貨幣型)。與 Variant 類型相比,Numeric 類型占用的存儲空間通常要少。
如果知道變數總是存放整數(如 12 )而不是帶小數點的數字(如 3.57),就應當將它聲明為 Integer 類型或 Long 類型。整數的運算速度較快,而且比其它數據類型占據的記憶體要少。在 For...Next 循環內作為計數器變數使用時,整數類型尤為有用。
關於控制結構的詳細資訊(取值範圍,儲存空間等),請參閱本詞條後面的“數據類型概述”。
如果變數包含小數,則可將它們聲明為 Single、Double 或 Currency 變數。Currency 數據類型支持小數點右面 4 位和小數點左面 15 位;它是一個精確的定點數據類型,適用於貨幣計算。浮點(Single 和 Double)數比 Currency 的有效範圍大得多,但有可能產生小的進位誤差。
浮點數值可表示為 mmmEeee 或 mmmDeee ,其中 mmm 是假數,而 eee 是指數(以 10 為底的冪)。Single 數據類型的最大正數值為 3.402823E+38,或 3.4 乘以 10 的 38 次方;Double 數據類型的最大正數值是 1.79769313486232D+308 或 1.8 乘以 10 的 308 次方。用 D 將數值文字中的假數部分和指數部分隔開,就會導致將該值作為 Double 數據類型來處理。同樣,用這種方式使用 E,也會導致將該值作為 Single 數據類型來處理。

位元組型

如果變數包含二進制數,則將它聲明為 Byte 數據類型的數組。(本章後面的“數組”中將討論數組)。在轉換格式期間用 Byte 變數存儲二進制數據就可保留數據。當 String 變數在 ANSI 和 Unicode 格式間進行轉換時,變數中的任何二進制數據都會遭到破壞。在下列任何一種情況下,Visual Basic 都會自動在 ANSI 和 Unicode 之間進行轉換。
除一元減法外,所有可對整數進行操作的運算符均可操作 Byte 數據類型。因為 Byte 是從 0 - 255 的無符號類型,所以不能表示負數。因此,在進行一元減法運算時,Visual Basic 首先將 Byte 轉換為符號整數。
所有數值變數都可相互賦值,也可對 Variant 類型變數賦值。 在將浮點數賦予整數之前, Visual Basic要將浮點數的小數部分四捨五入,而不是將小數部分去掉。

文本型

如果變數總是包含字元串而從不包含數值,就可將其聲明為 String 類型。
PrivateSAsString
然後可將字元串賦予這個變數,並用字元串函式對它進行操作。
S="Database"S=Left(S,4)
按照預設規定,String 變數或參數是一個可變長度的字元串,隨著對字元串賦予新數據,它的長度可增可減。 也可以聲明字元串具有固定長度。可用以下語法聲明一個定長字元串:
String*size
例如,為了聲明一個長度為 50 字元的字元串,可用下列語句
DimEmpNameAsString*50
如果賦予字元串的字元少於 50 個,則用空格將 EmpName 的不足部分填滿。如果賦予字元串的長度太長,已不能成為定長字元串,則 Visual Basic 會直接截去超出部分的字元。
因為定長字元串用空格填充尾部多餘的空間,所以在處理定長字元串時可發現,刪除空格的 Trim 和 RTrim 函式是很有用的。
可將標準模組中的定長字元串聲明為 Public 或 Private。在窗體類模組中,必須將定長字元串聲明為 Private。

操作方法

轉換

如果字元串表示數值,則可將字元串賦予數值變數。也可將數值賦予字元串變數。例如,將命令按鈕文本框和列表框放置在窗體中。在命令按鈕的 Click 事件中輸入下列代碼。運行應用程式並單擊命令按鈕
PrivateSubCommand1_Click()DimintXAsIntegerDimstrYAsStringstrY="100.23"intX=strY'將字元串傳遞給數值變數。List1.AddItemCos(strY)'將字元串中數值的餘弦值。'添加到列表框中。strY=Cos(strY)'將餘弦值傳遞給字元串變數。Text1.Text=strY'在文本框中顯示字元串。EndSub
Visual Basic 會自動強制變數為適當的數據類型。在轉換字元串和數值時要小心;如果傳送字元串中的值不是數值,則在運行時會出錯。
邏輯型
變數的值只是“true/false”、“yes/no”、“on/off”信息,則可將它聲明為 Boolean 類型。Boolean 的預設值為 False。在下面的例子中,blnRunning 是 Boolean 變數,存儲簡單的 yes/no 設定。
DimblnRunningAsBoolean'查看磁帶是否在轉。IfRecorder.Direction=1ThenblnRunning=TrueEndif
日期型
Date 和 Time 值既可包含在特定的 Date 數據類型中,又可包含在 Variant 變數中。一般的 Date 特性適用於這兩種類型。
詳細信息 請參閱《在線上手冊》的“高級變數主題”中的“在 Variant 變數中存儲 Date/Time 值”部分。
當其它數值數據類型轉換為 Date 時,小數點左邊的值表示 Date 信息,小數點右邊的值則代表 Time。午夜為 0,正午為 0.5。負數表示公元 1899 年 12 月 31 日之前的 Date。
對象型
Object 變數作為 32 位(4 個位元組)地址來存儲,該地址可引用應用程式中或某些其它應用程式中的對象。可以隨後(用 Set 語句)指定一個被聲明為 Object 的變數去引用應用程式所識別的任何實際對象
DimobjDbAsObjectSetobjDb=OpenDatabase("c:\Vb5\Biblio.mdb")
在聲明對象變數時,請試用特定的類,而不用一般的 Object(例如用 TextBox 而不用 Control,或者象上面的例子那樣,用 Database 取代 Object)。運行應用程式之前,Visual Basic 可以決定引用特定類型對象屬性和方法。因此,應用程式在運行時速度會更快。在“對象瀏覽器”中列舉了特定的類。
當使用其它應用程式對象,並在“對象瀏覽器”中的“類”列表中列舉對象時,不要用 Variant 或一般的 Object,而應聲明對象。這樣可確保 Visual Basic 能夠識別引用的特定類型對象,在運行時解決引用問題。
詳細信息 關於創建和指定對象以及對象變數的更詳細信息,請參閱本章後面的“創建對象”部分。
Visual Basic 提供了幾種轉換函式,可用來將值轉換成特定數據類型。例如,用 CCur函式將值轉換成 Currency 類型:
PayPerWeek = CCur (hours * hourlyPay)
轉換函式
將表達式轉換成
Cbool
Boolean
Cbyte
Byte
Ccur
Currency
Cdate
Date
CDbl
Double
Cint
Integer
CLng
Long
Single
CStr
String
Cvar
Variant
CVErr
Error
對目標數據類型,傳遞到轉換函式的值必須是有效的,否則會發生錯誤。例如,如果想把 Long 型數轉換成 Integer 型數,那么,Long 型數必須在 Integer 數據類型的有效範圍之內。
相關信息請查閱本詞條後面的 "數據類型概述"
變體型
概述
Variant 變數能夠存儲所有系統定義類型的數據。如果把它們賦予 Variant 變數,則不必在這些數據的類型間進行轉換; Visual Basic 會自動完成任何必要的轉換。例如:
DimSomeValue'預設為Variant。SomeValue="17"'SomeValue包含"17"(雙字元的串)。SomeValue=SomeValue-15'SomeValue包含數值2。SomeValue="U"&SomeValue'SomeValue包含"U2"(雙字元的串)。
不必過多關注 Variant 變數中數據的類型就可對 Variant 變數進行操作,但須避免落入陷阱。
如果對 Variant 變數進行數學運算或函式運算,則 Variant 必包含某個數。更詳細的信息,請參閱《在線上手冊》中“高級變數主題”中的“變數中存儲的 Numeric 值”部分。
如果正在連線兩個字元串,則用 " & " 操作符而不用 " + " 操作符。更詳細的信息,請參閱《在線上手冊》中“高級變數主題”中的“Variant 變數中存儲的 Strings”部分。
除了可以像其它標準數據類型一樣操作外,Variants 還包含三種特定值:Empty,Null 和 Error。

定植

Empty 值
有時需要知道是否已將一個值賦予所創建的變數。在賦值之前,Variant 變數具有值 Empty。值 Empty 是異於0、零長度字元串 ("") 或 Null 值的特定值。可用 IsEmpty 函式測試 Empty 值:
IfIsEmpty(Z)ThenZ=0
當 Variant 變數包含 Empty 值時,可在表達式中使用它;將其作為 0 或零長度字元串來處理,這要根據表達式來定。
只要將任何值(包括 0、零長度字元串或 Null)賦予 Variant 變數,Empty 值就會消失。而將關鍵字 Empty 賦予 Variant 變數,就可將 Variant 變數恢復為 Empty。
Null 值
Variant 數據類型還可包含一特定值:Null。Null通常用於資料庫套用程式,表示未知數據或丟失的數據。 由於在資料庫中使用 Null 方法,Null 具有某些唯一的特性:
對包含 Null 的表達式,計算結果總是 Null。於是說 Null 通過表達式“傳播”;如果表達式的部分之值為 Null,那么整個表達式的值也為 Null。
將 Null 值、含 Null 的 Variant 變數或計算結果為 Null 的表達式作為參數傳遞給大多數函式,將會使函式返回 Null。
Null 值經由返回 Variant 數據類型的內在函式傳播。
也可用 Null 關鍵字指定 Null 值。
Z=Null
也可用 IsNull 函式測試 Variant 變數是否包含 Null 值。
IfIsNull(X)AndIsNull(Y)ThenZ=NullElseZ=0EndIf
如果將 Null 值賦予 Variant 以外的任何其它類型變數,則將出現可以捕獲的錯誤。而將 Null 值賦予 Variant 則不會發生錯誤,Null 將通過包含 Variant 變數的表達式傳播(儘管 Null 並不通過某些函式來傳播)。可以從任何具有 Variant 返回值的函式過程返回 Null。
除非明確將 Null 賦予變數,否則變數不會設定成 Null 值,所以,如果不在應用程式中使用 Null,就不必書寫測試 Null 和處理 Null 的程式。
詳細信息 關於如何在表達式中使用 Null 的詳細信息,請參閱語言參考的“Null”部分。
Error 值
在 Variant 中,Error 是特定值,指出已發生的過程中的錯誤狀態。但是,與其它類型錯誤不同,這裡並未發生正常的應用程式級的錯誤處理。因此,程式設計師應用程式本身可根據 Error 值進行取捨。利用 CVErr 函式將實數轉換成錯誤值就可建立 Error 值。
詳細信息 關於如何在表達式中使用 Error 值,請參閱語言參考中的“CVErr 函式”部分。關於錯誤處理的信息,請參閱“調試代碼和處理錯誤”。有關 Variant 數據類型的更詳細信息,請參閱《在線上手冊》中的“高級變數主題”。
存儲空間大小與範圍
以下表格顯示所支持的數據類型,以及存儲空間大小與範圍。
數據類型
儲存空間大小(單位:位元組)
範圍
Byte(位元組型)
1
0 - 255
Boolean(布爾型/邏輯型)
2
True 或 False
Integer(整數型)
2
-32,768 ~ 32767
Long(長整形)
4
-2,147,483,648 ~ 2,147,483,647
4
負數範圍:
-3.402823E38 ~ -1.401298E-45
正數範圍:
1.401298E-45 ~ 3.402823E38
8
負數範圍:
-1.797,693,134,862,32E308 ~
-4.940,656,458,412,47E-324
正數範圍:
4.940,656,458,412,47E-324 ~
1.797,693,134,862,32E308
Currency
(變比整形 / 貨幣類型)
8
-922,337,203,685,477.5808~
922,337,203,685,477.5807
Decimal(十進制型)
14
沒有小數點時:
+/-79,228,162,514,264,337,593,543,950,335
有小數點時:
+/-7.922,816,251,426,433,759,354,395,033,5
最小的非零值:
+/-0.000,000,000,000,000,000,000,000,000,1
Date(時間日期型)
8
100年1月1日~9999年12月31日
Object(對象型)
4
任何 Object 引用
String (變長)
10
長度從 0 到 大約 20 億
String (定長)
10
長度從 1 到大約 65,400
Variant (數字)
16
任何數字值,最大可達 Double 的範圍
Variant (字元)
22
與字元串長度,變長 String 有相同的範圍
用戶自定義變數
-
-
任何數據類型的數組都需要 20 個位元組的記憶體空間,加上每一數組維數占 4 個位元組,再加上數據本身所占用的空間。數據所占用的記憶體空間可以用數據元數目乘上每個元素的大小加以計算。例如,以 4 個 2 位元組之 Integer 數據元所組成的一維數組中的數據,占 8 個位元組。這 8 個位元組加上額外的 24 個位元組,使得這個數組所需總記憶體空間為 32 個位元組。
包含一數組的 Variant 比單獨的一個數組需要多 12 個位元組
定類,定序;定比;定距

相關詞條

熱門詞條

聯絡我們