運算子結果的數據類型 (Visual Basic)

Visual Basic 會根據作數的數據類型來判斷作業的結果數據類型。 在某些情況下,這可能是範圍大於任一作數的數據類型。

數據類型範圍

相關數據類型的範圍,依最小到最大的順序,如下所示:

  • 布爾值 - 兩個可能的值

  • SByte、 Byte — 256 個可能的整數值

  • Short、 UShort - 65,536 (6.5...E+4) 可能的整數值

  • 整數, UInteger - 4,294,967,296 (4.2...E+9) 可能的整數值

  • 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為 。

另請參閱