算術運算子可用來執行許多熟悉的算術運算,這些運算牽涉到常值、變數、其他運算式、函數和屬性呼叫和常數所代表的數值計算。 使用算術運算子進行分類的還包括位移運算子,其作用在運算元的個別位元層級,並將其位模式向左或向右移動。
算術運算
您可以搭配 + 運算符在表達式中新增兩個值,或使用 - Operator (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) 來執行。 整數除法會返回商數,也就是說,這個整數代表除數可以整除被除數的次數,而不考慮任何餘數。 被除數和除數必須是此運算子的整數型別(SByte
、Byte
、Short
、UShort
、Integer
、UInteger
、Long
和 ULong
)。 所有其他類型都必須先轉換成整數類型。 下列範例示範整數除法。
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.
嘗試進行零除運算
除以零會根據所涉及的數據類型而有不同的結果。 在整數除法(SByte
、Byte
、Short
、UShort
、Integer
、UInteger
、Long
、ULong
)中,.NET Framework 會擲回異常DivideByZeroException。 在 Decimal
或 Single
數據類型上的除法運算中,.NET Framework 也會引發DivideByZeroException例外狀況。
在涉及數據類型的 Double
浮點除法中,不會擲回任何例外狀況,而結果會根據股息而代表 NaN、 PositiveInfinity或 NegativeInfinity的類別成員。 下表摘要說明嘗試將值除 Double
以零的各種結果。
股息數據類型 | Divisor 數據類型 | 股息值 | 結果 |
---|---|---|---|
Double |
Double |
0 | NaN (不是數學定義的數位) |
Double |
Double |
> 0 | PositiveInfinity |
Double |
Double |
< 0 | NegativeInfinity |
當您攔截例外狀況 DivideByZeroException 時,您可以使用其成員來協助您處理它。 例如, Message 屬性會保存例外狀況的消息正文。 如需詳細資訊,請參閱 Try...Catch...Finally 語句。
Bit-Shift 營運
位元移位運算會在位元模式上執行算術移位。 模式包含在左邊的作數中,而右邊的作數會指定要移動模式的位置數目。 您可以使用>>右移運算子將模式移位,或使用<<左移運算子將模式移位。
模式運算元的資料類型必須是 SByte
、Byte
、Short
、UShort
、Integer
、UInteger
、Long
或 ULong
。 移位量作數的資料類型必須是 Integer
或必須擴大為 Integer
。
算術移位不是循環移位,這表示從結果的一端移出的位元不會在另一端重新引入。 位移後空出的位元按如下設定:
0 用于表示算術左移
0 表示將正數進行算術右移
0 表示對無符號資料類型(
Byte
、UShort
、UInteger
、ULong
)進行算術右移位。1 表示對負數進行算術右移(
SByte
、Short
、Integer
或Long
)
下列範例會將 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.
算術移位永遠不會產生溢位例外狀況。
位運算
除了是邏輯運算子之外,Not
、Or
、And
和 Xor
也會在數值上使用時執行逐位運算。 如需詳細資訊,請參閱 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
。 如需詳細資訊,請參閱 擴大和縮小轉換。