Типы данных результатов оператора (Visual Basic)

Visual Basic определяет тип результирующих данных операции на основе типов данных операндов. В некоторых случаях это может быть тип данных с большим диапазоном, чем любой операнды.

Диапазоны типов данных

Диапазоны соответствующих типов данных в порядке от наименьшего до наибольшего, приведены ниже.

  • Логическое значение — два возможных значения

  • SByte, Byte — 256 возможных целочисленных значений

  • Short, UShort — 65 536 (6,5...E+4) возможные целочисленные значения

  • Целое число, UInteger — 4 294 967 296 (4.2...E+9) возможные целочисленные значения

  • 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 (абсолютное значение)

  • Double — максимальный диапазон 1.7...E+308 (абсолютное значение)

Дополнительные сведения о типах данных Visual Basic см. в разделе "Типы данных".

Если операнд оценивается как Нет, арифметические операторы Visual Basic обрабатывают его как ноль.

Десятичная арифметика

Обратите внимание, что тип данных Decimal не является плавающей запятой или целым числом.

Если любой +операнды , , */или операция естьDecimal, а другая — нет Single или ModDoubleVisual Basic расширяет другой операнд до Decimal. Он выполняет операцию в Decimal, а результирующий тип данных — Decimal.

Арифметический арифметический с плавающей запятой

Visual Basic выполняет арифметику с плавающей запятой в Double, которая является наиболее эффективным типом данных для таких операций. Однако если один операнд является одним , а другой — нет 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
Унарные + Короткие SByte Байт Короткие UShort Целое UInteger Long ULong
Унарные Короткие SByte Короткие Короткие Целое Целое Long Long Десятичное число

<< операторы и >> операторы

В следующей таблице показаны типы данных результатов для двух операторов битовых сдвигов и <<>>. Visual Basic обрабатывает каждый оператор bit-shift как унарный оператор на левом операнде (битовый шаблон, который необходимо переместить).

Boolean SByte Byte Short UShort Integer UInteger Long ULong
<<, >> Короткие SByte Байт Короткие UShort Целое UInteger Long ULong

Если левый операнд имеет Decimalзначение , SingleDoubleили StringVisual Basic пытается преобразовать его перед Long операцией, а тип результирующих данных — Long. Правый операнд (число битовых позиций для смены) должен быть Integer или типом, который расширяется до Integer.

Двоичные +, –, *и операторы мода

В следующей таблице показаны типы данных результатов для двоичных + и операторов и *Mod операторов. Обратите внимание, что эта таблица симметричная; для заданного сочетания типов данных операнда результирующий тип данных совпадает независимо от порядка операндов.

Boolean SByte Byte Short UShort Integer UInteger Long ULong
Boolean Короткие SByte Короткие Короткие Целое Целое Long Long Десятичное число
SByte SByte SByte Короткие Короткие Целое Целое Long Long Десятичное число
Byte Короткие Короткие Байт Короткие UShort Целое UInteger Long ULong
Short Короткие Короткие Короткие Короткие Целое Целое Long Long Десятичное число
UShort Целое Целое UShort Целое UShort Целое UInteger Long ULong
Integer Целое Целое Целое Целое Целое Целое Long Long Десятичное число
UInteger Long Long UInteger Long UInteger Long UInteger Long ULong
Long Long Long Long Long Long Long Long Long Десятичное число
ULong Десятичное число Десятичное число ULong Десятичное число ULong Десятичное число ULong Десятичное число ULong

Оператор \

В следующей таблице показаны типы данных результатов для \ оператора. Обратите внимание, что эта таблица симметричная; для заданного сочетания типов данных операнда результирующий тип данных совпадает независимо от порядка операндов.

Boolean SByte Byte Short UShort Integer UInteger Long ULong
Boolean Короткие SByte Короткие Короткие Целое Целое Long Long Long
SByte SByte SByte Короткие Короткие Целое Целое Long Long Long
Byte Короткие Короткие Байт Короткие UShort Целое UInteger Long ULong
Short Короткие Короткие Короткие Короткие Целое Целое Long Long Long
UShort Целое Целое UShort Целое UShort Целое UInteger Long ULong
Integer Целое Целое Целое Целое Целое Целое Long Long Long
UInteger Long Long UInteger Long UInteger Long UInteger Long ULong
Long Long Long Long Long Long Long Long Long Long
ULong Long Long ULong Long ULong Long ULong Long ULong

Если операнд \ оператора имеет значение Decimal, Single или Double, Visual Basic пытается преобразовать его в long до операции, а тип результирующих данных равен Long.

Сравнения реляционных и битовых

Тип результирующих данных реляционной операции (=, <>, <, >, <=) >=всегда Booleanявляется логическим типом данных. То же самое верно для логических операций (And, AndAlso, Not, Or, OrElse) Xorна Boolean операндах.

Тип результирующих данных побитовой логической операции зависит от типов данных операндов. Обратите внимание, что AndAlso и OrElse определены только для Booleanvisual Basic, и Visual Basic преобразует каждый операнд в Boolean соответствии с необходимостью перед выполнением операции.

=, <>, <><, =, и >= Операторы

Если оба операнда являются Boolean, Visual Basic считает True меньше False. Если числовой тип сравнивается с типом String, Visual Basic пытается преобразовать его StringDouble перед операцией. Date Операнду Char можно сравнить только с другим операндом одного типа данных. Тип данных результата всегда Boolean.

Побитовая не оператор

В следующей таблице показаны типы данных результатов для побитового Not оператора.

Boolean SByte Byte Short UShort Integer UInteger Long ULong
Not Логический SByte Байт Короткие UShort Целое UInteger Long ULong

Если операнд имеет Decimalзначение , DoubleSingleили StringVisual Basic пытается преобразовать его в Long операцию до операции, а тип результирующих данных — Long.

Побитовые и, или, а также операторы Xor

В следующей таблице показаны типы данных результатов для побитовых AndOrоператоров и Xor операторов. Обратите внимание, что эта таблица симметричная; для заданного сочетания типов данных операнда результирующий тип данных совпадает независимо от порядка операндов.

Boolean SByte Byte Short UShort Integer UInteger Long ULong
Boolean Логический SByte Короткие Короткие Целое Целое Long Long Long
SByte SByte SByte Короткие Короткие Целое Целое Long Long Long
Byte Короткие Короткие Байт Короткие UShort Целое UInteger Long ULong
Short Короткие Короткие Короткие Короткие Целое Целое Long Long Long
UShort Целое Целое UShort Целое UShort Целое UInteger Long ULong
Integer Целое Целое Целое Целое Целое Целое Long Long Long
UInteger Long Long UInteger Long UInteger Long UInteger Long ULong
Long Long Long Long Long Long Long Long Long Long
ULong Long Long ULong Long ULong Long ULong Long ULong

Если операнд имеет Decimalзначение , DoubleSingleили StringVisual Basic пытается преобразовать его Long до операции, а тип результирующих данных совпадает с тем же типом данных, что и если операнды уже былиLong.

Прочие операторы

Оператор & определяется только для объединения String операндов. Visual Basic преобразует каждый операнд в соответствии с необходимостью String перед операцией, а тип данных результата всегда String. Для целей & оператора все преобразования, которые String будут рассматриваться как расширенные, даже если Option Strict есть On.

IsNot Операторы Is требуют, чтобы оба операнда были ссылочным типом. Выражение TypeOf...Is требует, чтобы первый операнд был ссылочным типом, а второй операнду — именем типа данных. Во всех этих случаях тип результирующих данных имеет тип Booleanданных.

Оператор Like определяется только для сопоставления шаблонов String операндов. Visual Basic пытается преобразовать каждый операнд в соответствии с необходимостью String перед операцией. Тип данных результата всегда Boolean.

См. также