Share via


Visual Basic 的算術運算子

算術運算子可用來執行許多熟悉的算數運算,這些運算牽涉到常值、變數、其他運算式、函數和屬性呼叫與常數所代表的數值計算。 位元移位運算子也同樣使用算術運算子分類,其作用於運算元的個別位層級,並將其位元模式向左或向右移位。

算術運算

您可以使用 + 運算子將運算式中的兩個值一起加入,或使用 - 運算子 (Visual Basic) 減一個值,如下列範例所示。

Dim x As Integer
x = 67 + 34
x = 32 - 12

否定也會使用 - 運算子 (Visual Basic),但只有一個運算元,如下列範例所示。

Dim x As Integer = 65
Dim y As Integer
y = -x

乘法和除法分別使用 * 運算子/ 運算子 (Visual Basic),如下列範例所示。

Dim y As Double
y = 45 * 55.23
y = 32 / 23

指數使用 ^ 運算子,如下列範例所示。

Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

整數除法是使用 \ 運算子 (Visual Basic) 來執行。 整數除法會傳回商數,也就是代表除數可以除數的整數,而不考慮任何餘數。 除數和除數都必須是這個運算子的整數型別 (SByteByteShortUShortIntegerUIntegerLongULong)。 所有其他型別必須先轉換成整數型別。 下列範例示範整數除法。

Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

模數算術是使用 Mod 運算子來執行。 這個運算子會將除數除以整數次數被除數之後傳回餘數。 如果除數和被除數都是整數型別,則傳回的值是整數。 如果除數和被除數是浮點數類型,則傳回的值也是浮點數。 下列範例示範此行為。

Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' The preceding statement sets z to 4.
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' The preceding statement sets c to 1.18.

嘗試除以零

除以零會根據所涉及的資料類型而有不同的結果。 在整數除法 (SByteByteShortUShortIntegerUIntegerLongULong) 中,.NET Framework 會擲回 DivideByZeroException 例外狀況。 在 DecimalSingle 資料類型的除法作業中,.NET Framework 也會擲回 DivideByZeroException 例外狀況。

在涉及 Double 資料類型的浮點除法中,不會擲回任何例外狀況,而結果是代表 NaNPositiveInfinityNegativeInfinity 的類別成員,視被除數而定。 下表摘要說明嘗試將 Double 值除以零的各種結果。

被除數資料類型 除數資料類型 被除數的值 結果
Double Double 0 NaN (不是以數學方式定義的數字)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

當您攔截 DivideByZeroException 例外狀況時,可以使用其成員來協助您進行處理。 例如,Message 屬性會保存例外狀況的郵件內文。 如需詳細資訊,請參閱 Try...Catch...Finally 陳述式

位元移位運算子

位元移位運算會在位元模式上執行算術移位。 模式包含在左側的運算元中,而右側運算元會指定要移動模式的位置數目。 您可以使用 >> 運算子將模式向右移動,或使用 << 運算子向左移動。

模式運算元的資料類型必須為 SByteByteShortUShortIntegerUIntegerLongULong。 移位數量運算元的資料類型必須是 Integer 或必須擴大為 Integer

算術移位不是循環移位,表示位元會從結果的一端移位,不會在另一端重新引入。 移位所空出的位元位置設定如下:

  • 0 表示算術左移位

  • 0 表示正數的算術右移位

  • 0 表示不帶正負號資料類型的算術右移位 (ByteUShortUIntegerULong)

  • 1 表示負數的算術右移位 (SByteShortIntegerLong)

下列範例會將 Integer 值向左和向右移位。

Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.

算術移位永遠不會產生溢位例外狀況。

位元運算

除了是邏輯運算子之外,NotOrAndXor 在數值上使用時也會執行位元算術。 如需詳細資訊,請參閱 Visual Basic 中的邏輯運算子和位元運算子中的「位元運算」。

型別安全

運算元通常應該是相同的類型。 例如,如果您要使用 Integer 變數進行新增,您應該將其新增至另一個 Integer 變數,而且也應該將結果指派給類型為 Integer 的變數。

確保良好型別安全編碼做法的其中一種方法是使用 Option Strict 陳述式。 如果您設定 Option Strict On,Visual Basic 會自動執行「型別安全」轉換。 例如,如果您嘗試將 Integer 變數新增至 Double 變數,並將值指派給 Double 變數,則作業會正常進行,因為 Integer 值可以轉換成 Double,而不會遺失資料。 另一方面,類型不安全的轉換會導致編譯器 Option Strict On 錯誤。 例如,如果您嘗試將 Integer 變數新增至 Double 變數,並將值指派給 Integer 變數,則會導致編譯器錯誤,因為 Double 變數無法隱含轉換成類型 Integer

不過,如果您設定 Option Strict Off,則 Visual Basic 會允許進行隱含縮小轉換,但可能導致資料或精確度意外遺失。 基於這個理由,建議您在撰寫生產程式碼時使用 Option Strict On。 如需詳細資訊,請參閱 Widening and Narrowing Conversions

另請參閱