Visual Basic 根据作数的数据类型确定作的结果数据类型。 在某些情况下,这可能是一种数据类型,其范围大于任一作数的范围。
数据类型范围
相关数据类型的范围(从小到大)如下所示:
布尔值 - 两个可能的值
Short,UShort - 65,536 (6.5...E+4) 可能的整型值
Long、 ULong - 18,446,744,073,709,551,615 (1.8...E+19) 可能的整数值
十进制 - 1.5...E+29 可能的整数值,最大范围 7.9...E+28 (绝对值)
单个 - 最大范围 3.4...E+38 (绝对值)
双精度 - 最大范围 1.7...E+308 (绝对值)
有关 Visual Basic 数据类型的详细信息,请参阅 数据类型。
如果作数的计算结果为 Nothing,则 Visual Basic 算术运算符将它视为零。
十进制算术
请注意, 十进制 数据类型既不是浮点数据类型,也不是整数。
如果任一+
作数、–
作/
*
数或Mod
作不是Decimal
Single
,或者 Double
Visual Basic 将另一个作数扩大为Decimal
。 它执行作 Decimal
,结果数据类型为 Decimal
。
Floating-Point 算术
Visual Basic 在 Double 中执行大多数浮点算术,这是此类作最有效的数据类型。 但是,如果一个作数是 Single ,另一个作数不是 Double
,则 Visual Basic 将 Single
执行该作。 它根据需要将每个作数扩展为作前的相应数据类型,并且结果具有该数据类型。
/ 和 ^ 运算符
运算符 /
仅针对 Decimal、 Single 和 Double 数据类型定义。 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 |
|
---|---|---|---|---|---|---|---|---|---|
元 + |
Short | SByte | 字节(Byte) | Short | UShort | 整数 | UInteger | 长整型 | ULong |
元 – |
Short | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 十进制 |
<< 和 >> 运算符
下表显示了两个位移运算符的结果数据类型, <<
以及 >>
。 Visual Basic 将每个位移运算符视为其左作数上的一元运算符(要移动的位模式)。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
<< 、>> |
Short | SByte | 字节(Byte) | Short | UShort | 整数 | UInteger | 长整型 | ULong |
如果左侧作数为、、或 Visual Basic 尝试在作之前将其Long
转换为,则结果数据类型为 Long
。String
Double
Single
Decimal
右作数(要移动的位位置数)必须是 Integer
或扩大为 Integer
的类型。
二进制 +、–、*和 Mod 运算符
下表显示了二进制 +
和运算符和 –
*
Mod
运算符的结果数据类型。 请注意,此表是对称的;对于作数数据类型的给定组合,无论作数的顺序如何,结果数据类型都是相同的。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
Short | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 十进制 |
SByte |
SByte | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 十进制 |
Byte |
Short | Short | 字节(Byte) | Short | UShort | 整数 | UInteger | 长整型 | ULong |
Short |
Short | Short | Short | 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 |
Short | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
SByte |
SByte | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
Byte |
Short | Short | 字节(Byte) | Short | UShort | 整数 | UInteger | 长整型 | ULong |
Short |
Short | Short | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
UShort |
整数 | 整数 | UShort | 整数 | UShort | 整数 | UInteger | 长整型 | ULong |
Integer |
整数 | 整数 | 整数 | 整数 | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
UInteger |
长整型 | 长整型 | UInteger | 长整型 | UInteger | 长整型 | UInteger | 长整型 | ULong |
Long |
长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 |
ULong |
长整型 | 长整型 | ULong | 长整型 | ULong | 长整型 | ULong | 长整型 | ULong |
如果运算符的任一作数 \
是 Decimal、 Single 或 Double,则 Visual Basic 将尝试在作前将其转换为 Long ,并且结果数据类型为 Long
。
关系比较和按位比较
关系作(=
、、<>
<
、>
、、<=
)>=
的结果数据类型始终Boolean
为布尔数据类型。 对于作数上的Boolean
逻辑运算(And
、、AndAlso
Not
、Or
、OrElse
、Xor
)也是如此。
按位逻辑作的结果数据类型取决于作数的数据类型。 请注意, AndAlso
并且 OrElse
仅针对 Boolean
该作数定义,并且 Visual Basic 会根据需要 Boolean
将每个作数转换为执行该作之前。
=、、<>、><、<=和 >= 运算符
如果两个作数都是 Boolean
,则 Visual Basic 认为 True
小于 False
。 如果数值类型与 a String
进行比较,则 Visual Basic 将尝试在作之前转换为String
Double
该类型。 一 Char
个或多个 Date
作数只能与同一数据类型的另一个作数进行比较。 结果数据类型始终 Boolean
为 .
按位非运算符
下表显示了按位 Not
运算符的结果数据类型。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
布尔 | SByte | 字节(Byte) | Short | UShort | 整数 | UInteger | 长整型 | ULong |
如果作数为、、或 Visual Basic 尝试在作之前将其Long
转换为,则结果数据类型为 Long
。String
Double
Single
Decimal
按位和或 Xor 运算符
下表显示了按位And
Or
运算符和Xor
运算符的结果数据类型。 请注意,此表是对称的;对于作数数据类型的给定组合,无论作数的顺序如何,结果数据类型都是相同的。
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Boolean |
布尔 | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
SByte |
SByte | SByte | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
Byte |
Short | Short | 字节(Byte) | Short | UShort | 整数 | UInteger | 长整型 | ULong |
Short |
Short | Short | Short | Short | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
UShort |
整数 | 整数 | UShort | 整数 | UShort | 整数 | UInteger | 长整型 | ULong |
Integer |
整数 | 整数 | 整数 | 整数 | 整数 | 整数 | 长整型 | 长整型 | 长整型 |
UInteger |
长整型 | 长整型 | UInteger | 长整型 | UInteger | 长整型 | UInteger | 长整型 | ULong |
Long |
长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 | 长整型 |
ULong |
长整型 | 长整型 | ULong | 长整型 | ULong | 长整型 | ULong | 长整型 | ULong |
如果作数为、、或 Visual Basic 尝试在作之前将其转换为,Long
并且结果数据类型与作数已Long
相同。String
Double
Single
Decimal
其他运算符
运算符 &
仅用于 String
连接作数。 Visual Basic 根据需要 String
将每个作数转换为作前,结果数据类型始终为 String
。 出于运算符的目的 &
,要进行的所有转换 String
都被视为扩大,即使 Option Strict
是 On
。
和Is
IsNot
运算符要求两个作数都为引用类型。 ... TypeOf
Is
表达式要求第一个作数是引用类型,第二个作数是数据类型的名称。 在所有这些情况下,结果数据类型为 Boolean
.
仅 Like
针对作数的 String
模式匹配定义运算符。 Visual Basic 会根据需要 String
尝试将每个作数转换为作之前。 结果数据类型始终 Boolean
为 .