定義
計算機中,以
位(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 類型。
然後可將字元串賦予這個變數,並用
字元串函式對它進行操作。
按照預設規定,String
變數或參數是一個可變
長度的字元串,隨著對字元串賦予新數據,它的長度可增可減。 也可以聲明字元串具有固定
長度。可用以下
語法聲明一個定長字元串:
例如,為了聲明一個
長度為 50 字元的字元串,可用下列
語句:
如果賦予字元串的字元少於 50 個,則用空格將 EmpName 的不足部分填滿。如果賦予字元串的
長度太長,已不能成為定長字元串,則 Visual Basic 會直接截去超出部分的字元。
因為定長字元串用空格填充尾部多餘的空間,所以在處理定長字元串時可發現,刪除空格的 Trim 和 RTrim
函式是很有用的。
可將
標準模組中的定長字元串聲明為 Public 或 Private。在
窗體和
類模組中,必須將定長字元串聲明為 Private。
操作方法
轉換
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 值:
當 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 值。
也可用 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 個
位元組。
定類,定序;定比;定距