算術運算子可用來執行許多熟悉的算術運算,這些運算牽涉到常值、變數、其他運算式、函數和屬性呼叫和常數所代表的數值計算。 使用算術運算子進行分類的還包括位移運算子,其作用在運算元的個別位元層級,並將其位模式向左或向右移動。
算術運算
您可以搭配 + 運算符在表達式中新增兩個值,或使用 - 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 。 如需詳細資訊,請參閱 擴大和縮小轉換。