算术运算符 (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).

整数除法使用 [运算符](../../../language-reference/operators/integer-division-operator.md) (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 (、) 中,.NET Framework Long ULong 引发 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

但是,如果Visual Basic,则允许进行隐式收缩转换,尽管它们可能会导致意外 Option Strict Off 丢失数据或精度。 因此,建议在编写生产 Option Strict On 代码时使用 。 有关详细信息,请参阅 Widening and Narrowing Conversions

另请参阅