Visual Basic 會根據作數的數據類型來判斷作業的結果數據類型。 在某些情況下,這可能是範圍大於任一作數的數據類型。
數據類型範圍
相關數據類型的範圍,依最小到最大的順序,如下所示:
布爾值 - 兩個可能的值
Long, ULong - 18,446,744,073,709,551,615 (1.8...E+19) 可能的整數值
十進位 - 1.5...E+29 可能的整數值,最大範圍 7.9...E+28 (絕對值)
單一 - 最大範圍 3.4...E+38 (絕對值)
Double - 最大範圍 1.7...E+308 (絕對值)
如需 Visual Basic 資料類型的詳細資訊,請參閱 數據類型。
如果作數評估為 Nothing,則 Visual Basic 算術運算符會將它視為零。
十進位算術
請注意, Decimal 數據類型既不是浮點也不是整數。
如果 、 、 、 *或 Mod 作業的任一個作數是 Decimal ,而另一個作數不是 Single 或 Double,Visual Basic 會將另一+個作數擴大為 Decimal。 /– 它會在中 Decimal執行工作,而結果資料類型為 Decimal。
Floating-Point 算術
Visual Basic 會在 Double 中執行大多數浮點算術,這是這類作業最有效率的數據類型。 不過,如果一個作數是 Single ,另一個作數不是 Double,Visual Basic 會在 中 Single執行作業。 它會視需要將每個作數擴大為作業前的適當數據類型,而結果具有該數據類型。
/ 和 ^ 運算符
運算子 / 只會針對 Decimal、 Single 和 Double 資料類型定義。 Visual Basic 會視需要將每個作數擴大為作業前的適當數據類型,而且結果具有該數據類型。
下表顯示運算子的結果數據類型 / 。 請注意,此數據表是對稱的;對於作數數據類型的指定組合,不論作數的順序為何,結果數據類型都相同。
Decimal |
Single |
Double |
任何整數類型 | |
|---|---|---|---|---|
Decimal |
十進制 | 單身 | 兩倍 | 十進制 |
Single |
單身 | 單身 | 兩倍 | 單身 |
Double |
兩倍 | 兩倍 | 兩倍 | 兩倍 |
| 任何整數類型 | 十進制 | 單身 | 兩倍 | 兩倍 |
運算子 ^ 只會針對數據類型定義 Double 。 Visual Basic 會視需要在 Double 作業之前擴大每個作數,而且結果數據類型一律 Double為 。
整數算術
整數作業的結果數據類型取決於作數的數據類型。 一般而言,Visual Basic 會使用下列原則來判斷結果數據類型:
如果二元運算子的兩個作數具有相同的數據類型,結果就會有該數據類型。 例外狀況是
Boolean,這個例外狀況會強制為Short。如果不帶正負號的作數與帶正負號的作數一起參與,則結果具有至少與任一作數一樣大範圍的帶正負號型別。
否則,結果通常會有兩個作數數據類型的較大。
請注意,結果數據類型可能與任一作數數據類型不同。
備註
結果數據類型不一定夠大,無法保存作業所產生的所有可能值。 OverflowException如果值對結果數據類型而言太大,就會發生例外狀況。
一元 + 和 – 運算子
下表顯示兩個一元運算符 +–和 的結果數據類型。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
|---|---|---|---|---|---|---|---|---|---|
元 + |
短 | SByte | 位元 | 短 | UShort | 整數 | UInteger | 長 | ULong |
元 – |
短 | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 十進制 |
<< 和 >> 運算子
下表顯示兩個位移運算符 <<>>和 的結果數據類型。 Visual Basic 會將每個位移位運算子視為其左作數上的一元運算元(要移位的位模式)。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
|---|---|---|---|---|---|---|---|---|---|
<<、>> |
短 | SByte | 位元 | 短 | UShort | 整數 | UInteger | 長 | ULong |
如果左作數為 、、 或 ,Visual Basic 會嘗試在作業之前將它Long轉換成 ,且結果數據類型為 。SingleStringDoubleDecimalLong 右作數(要移位的位位置數目)必須是 Integer 或擴大為 Integer的類型。
Binary +、–、*和 Mod 運算符
下表顯示二進位 + 和運算符和 –* 和 Mod 運算子的結果數據類型。 請注意,此數據表是對稱的;對於作數數據類型的指定組合,不論作數的順序為何,結果數據類型都相同。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
|---|---|---|---|---|---|---|---|---|---|
Boolean |
短 | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 十進制 |
SByte |
SByte | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 十進制 |
Byte |
短 | 短 | 位元 | 短 | UShort | 整數 | UInteger | 長 | ULong |
Short |
短 | 短 | 短 | 短 | 整數 | 整數 | 長 | 長 | 十進制 |
UShort |
整數 | 整數 | UShort | 整數 | UShort | 整數 | UInteger | 長 | ULong |
Integer |
整數 | 整數 | 整數 | 整數 | 整數 | 整數 | 長 | 長 | 十進制 |
UInteger |
長 | 長 | UInteger | 長 | UInteger | 長 | UInteger | 長 | ULong |
Long |
長 | 長 | 長 | 長 | 長 | 長 | 長 | 長 | 十進制 |
ULong |
十進制 | 十進制 | ULong | 十進制 | ULong | 十進制 | ULong | 十進制 | ULong |
\算子
下表顯示運算子的結果數據類型 \ 。 請注意,此數據表是對稱的;對於作數數據類型的指定組合,不論作數的順序為何,結果數據類型都相同。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
|---|---|---|---|---|---|---|---|---|---|
Boolean |
短 | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 長 |
SByte |
SByte | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 長 |
Byte |
短 | 短 | 位元 | 短 | UShort | 整數 | UInteger | 長 | ULong |
Short |
短 | 短 | 短 | 短 | 整數 | 整數 | 長 | 長 | 長 |
UShort |
整數 | 整數 | UShort | 整數 | UShort | 整數 | UInteger | 長 | ULong |
Integer |
整數 | 整數 | 整數 | 整數 | 整數 | 整數 | 長 | 長 | 長 |
UInteger |
長 | 長 | UInteger | 長 | UInteger | 長 | UInteger | 長 | ULong |
Long |
長 | 長 | 長 | 長 | 長 | 長 | 長 | 長 | 長 |
ULong |
長 | 長 | ULong | 長 | ULong | 長 | ULong | 長 | ULong |
如果運算符的任一作數 \ 是 Decimal、 Single 或 Double,則 Visual Basic 會在作業之前嘗試將它轉換成 Long ,而結果數據類型為 Long。
關係型和位比較
關係型作業的結果數據類型 (=、 <=>=<<>>、 ) 一律Boolean為布爾數據類型。 邏輯運算 (And、 、 AndAlsoNot、 Or、 、 OrElse、 Xor、 ) 的作數也是如此Boolean。
位邏輯運算的結果數據類型取決於作數的數據類型。 請注意, AndAlso 和 OrElse 只會針對 Boolean定義,而且 Visual Basic 會視需要 Boolean 將每個作數轉換成 ,然後再執行作業。
=、、<>、><、<=和 >= 運算符
如果這兩個作數都是 Boolean,Visual Basic 會將 True 視為小於 False。 如果數值類型與 String比較,Visual Basic 會嘗試在作業之前將 轉換成 StringDouble 。
Char或 Date作數只能與相同數據類型的另一個作數進行比較。 結果資料類型一律 Boolean為 。
位 Not 運算子
下表顯示位 Not 運算子的結果數據類型。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
|---|---|---|---|---|---|---|---|---|---|
Not |
布林值 | SByte | 位元 | 短 | UShort | 整數 | UInteger | 長 | ULong |
如果作數為 、、 或 ,Visual Basic 會嘗試在作業之前將它Long轉換成 ,且結果數據類型為 。SingleStringDoubleDecimalLong
位和、或 和 Xor 運算符
下表顯示位 And、 Or和 Xor 運算子的結果數據類型。 請注意,此數據表是對稱的;對於作數數據類型的指定組合,不論作數的順序為何,結果數據類型都相同。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
|---|---|---|---|---|---|---|---|---|---|
Boolean |
布林值 | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 長 |
SByte |
SByte | SByte | 短 | 短 | 整數 | 整數 | 長 | 長 | 長 |
Byte |
短 | 短 | 位元 | 短 | UShort | 整數 | UInteger | 長 | ULong |
Short |
短 | 短 | 短 | 短 | 整數 | 整數 | 長 | 長 | 長 |
UShort |
整數 | 整數 | UShort | 整數 | UShort | 整數 | UInteger | 長 | ULong |
Integer |
整數 | 整數 | 整數 | 整數 | 整數 | 整數 | 長 | 長 | 長 |
UInteger |
長 | 長 | UInteger | 長 | UInteger | 長 | UInteger | 長 | ULong |
Long |
長 | 長 | 長 | 長 | 長 | 長 | 長 | 長 | 長 |
ULong |
長 | 長 | ULong | 長 | ULong | 長 | ULong | 長 | ULong |
如果作數為 、、 或 ,Visual Basic 會嘗試在作業之前將它Long轉換成 ,而且結果數據類型與該作數已Long相同。StringDoubleSingleDecimal
雜項運算子
運算符 & 只會針對作數的 String 串連定義。 Visual Basic 會視需要 String 將每個作數轉換成 作業之前,且結果數據類型一律 String為 。 針對運算子的目的&,即使 Option Strict 是 On,所有 轉換String都會被視為擴大。
Is和 IsNot 運算子需要這兩個作數的參考型別。
TypeOf...Is 表達式需要第一個作數是參考型別,而第二個作數必須是數據類型的名稱。 在所有這些情況下,結果數據類型都是 Boolean。
運算子 Like 只會針對作數的 String 模式比對來定義。 Visual Basic 會視需要在 String 作業之前,嘗試將每個作數轉換成 。 結果資料類型一律 Boolean為 。