运算符结果的数据类型 (Visual Basic)

Visual Basic 根据作数的数据类型确定作的结果数据类型。 在某些情况下,这可能是一种数据类型,其范围大于任一作数的范围。

数据类型范围

相关数据类型的范围(从小到大)如下所示:

  • 布尔值 - 两个可能的值

  • SByte字节 - 256 个可能的整型值

  • Short,UShort - 65,536 (6.5...E+4) 可能的整型值

  • IntegerUInteger — 4,294,967,296 (4.2...E+9) 可能的整数值

  • LongULong - 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作不是DecimalSingle,或者 DoubleVisual Basic 将另一个作数扩大为Decimal。 它执行作 Decimal,结果数据类型为 Decimal

Floating-Point 算术

Visual Basic 在 Double 中执行大多数浮点算术,这是此类作最有效的数据类型。 但是,如果一个作数是 Single ,另一个作数不是 Double,则 Visual Basic 将 Single执行该作。 它根据需要将每个作数扩展为作前的相应数据类型,并且结果具有该数据类型。

/ 和 ^ 运算符

运算符 / 仅针对 DecimalSingleDouble 数据类型定义。 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转换为,则结果数据类型为 LongStringDoubleSingleDecimal 右作数(要移动的位位置数)必须是 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

如果运算符的任一作数 \DecimalSingleDouble,则 Visual Basic 将尝试在作前将其转换为 Long ,并且结果数据类型为 Long

关系比较和按位比较

关系作(=、、<><>、、<=>=的结果数据类型始终Boolean布尔数据类型。 对于作数上的Boolean逻辑运算(And、、AndAlsoNotOrOrElseXor)也是如此。

按位逻辑作的结果数据类型取决于作数的数据类型。 请注意, AndAlso 并且 OrElse 仅针对 Boolean该作数定义,并且 Visual Basic 会根据需要 Boolean 将每个作数转换为执行该作之前。

=、、<>、><、<=和 >= 运算符

如果两个作数都是 Boolean,则 Visual Basic 认为 True 小于 False。 如果数值类型与 a String进行比较,则 Visual Basic 将尝试在作之前转换为StringDouble该类型。 一 Char 个或多个 Date 作数只能与同一数据类型的另一个作数进行比较。 结果数据类型始终 Boolean为 .

按位非运算符

下表显示了按位 Not 运算符的结果数据类型。

Boolean SByte Byte Short UShort Integer UInteger Long ULong
Not 布尔 SByte 字节(Byte) Short UShort 整数 UInteger 长整型 ULong

如果作数为、、或 Visual Basic 尝试在作之前将其Long转换为,则结果数据类型为 LongStringDoubleSingleDecimal

按位和或 Xor 运算符

下表显示了按位AndOr运算符和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相同。StringDoubleSingleDecimal

其他运算符

运算符 & 仅用于 String 连接作数。 Visual Basic 根据需要 String 将每个作数转换为作前,结果数据类型始终为 String。 出于运算符的目的 & ,要进行的所有转换 String 都被视为扩大,即使 Option StrictOn

IsIsNot运算符要求两个作数都为引用类型。 ... TypeOfIs 表达式要求第一个作数是引用类型,第二个作数是数据类型的名称。 在所有这些情况下,结果数据类型为 Boolean.

Like 针对作数的 String 模式匹配定义运算符。 Visual Basic 会根据需要 String 尝试将每个作数转换为作之前。 结果数据类型始终 Boolean为 .

另请参阅