共用方式為


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

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

數據類型範圍

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

  • 布爾值 - 兩個可能的值

  • SByteByte — 256 個可能的整數值

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

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

  • LongULong - 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 ,而另一個作數不是 SingleDouble,Visual Basic 會將另一+個作數擴大為 Decimal/ 它會在中 Decimal執行工作,而結果資料類型為 Decimal

Floating-Point 算術

Visual Basic 會在 Double 中執行大多數浮點算術,這是這類作業最有效率的數據類型。 不過,如果一個作數是 Single ,另一個作數不是 Double,Visual Basic 會在 中 Single執行作業。 它會視需要將每個作數擴大為作業前的適當數據類型,而結果具有該數據類型。

/ 和 ^ 運算符

運算子 / 只會針對 DecimalSingleDouble 資料類型定義。 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

如果運算符的任一作數 \DecimalSingleDouble,則 Visual Basic 會在作業之前嘗試將它轉換成 Long ,而結果數據類型為 Long

關係型和位比較

關係型作業的結果數據類型 (=<=>=<<>>、 ) 一律Boolean布爾數據類型。 邏輯運算 (And、 、 AndAlsoNotOr、 、 OrElseXor、 ) 的作數也是如此Boolean

位邏輯運算的結果數據類型取決於作數的數據類型。 請注意, AndAlsoOrElse 只會針對 Boolean定義,而且 Visual Basic 會視需要 Boolean 將每個作數轉換成 ,然後再執行作業。

=、、<>、><、<=和 >= 運算符

如果這兩個作數都是 Boolean,Visual Basic 會將 True 視為小於 False。 如果數值類型與 String比較,Visual Basic 會嘗試在作業之前將 轉換成 StringDoubleCharDate作數只能與相同數據類型的另一個作數進行比較。 結果資料類型一律 Boolean為 。

位 Not 運算子

下表顯示位 Not 運算子的結果數據類型。

Boolean SByte Byte Short UShort Integer UInteger Long ULong
Not 布林值 SByte 位元 UShort 整數 UInteger ULong

如果作數為 、、 或 ,Visual Basic 會嘗試在作業之前將它Long轉換成 ,且結果數據類型為 。SingleStringDoubleDecimalLong

位和、或 和 Xor 運算符

下表顯示位 AndOrXor 運算子的結果數據類型。 請注意,此數據表是對稱的;對於作數數據類型的指定組合,不論作數的順序為何,結果數據類型都相同。

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 StrictOn,所有 轉換String都會被視為擴大。

IsIsNot 運算子需要這兩個作數的參考型別。 TypeOf...Is 表達式需要第一個作數是參考型別,而第二個作數必須是數據類型的名稱。 在所有這些情況下,結果數據類型都是 Boolean

運算子 Like 只會針對作數的 String 模式比對來定義。 Visual Basic 會視需要在 String 作業之前,嘗試將每個作數轉換成 。 結果資料類型一律 Boolean為 。

另請參閱