Поделиться через


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

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

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

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

  • Boolean — два возможных значения

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

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

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

  • Long, ULong — 18 446 744 073 709 551 615 (1.8...E+19) возможных целых значений

  • Decimal — 1,5...E+29 возможных целых значений, максимальный диапазон 7,9...E+28 (абсолютное значение)

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

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

Дополнительные сведения о типах данных Visual Basic содержатся в разделе Сводка типов данных (Visual Basic).

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

Десятичная система исчисления

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

Если один операнд +, –, *, /, или операция Mod является Decimal, a другой не является Single или Double, Visual Basic расширяет другой операнд до Decimal. Он выполняет операцию в Decimal, и тип данных результата является Decimal.

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

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

Операторы / и ^

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

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

Decimal

Single

Double

Любой целочисленный тип

Decimal

Десятичное число

Single

Double

Десятичное число

Single

Single

Single

Double

Single

Double

Double

Double

Double

Double

Любой целочисленный тип

Десятичное число

Single

Double

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

Long

ULong

Унарный –

Short

SByte

Short

Short

Целое число

Целое число

Long

Long

Десятичное число

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

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

Boolean

SByte

Byte

Short

UShort

Integer

UInteger

Long

ULong

<<, >>

Short

SByte

Byte

Short

UShort

Целое число

UInteger

Long

ULong

Если операнд из левой части является Decimal, Single Double или String, Visual Basic попытается преобразовать его в Long перед операцией, и тип данных результата будет Long. Операнд из правой части (число битовых позиций для сдвига) должен быть типа Integer, или типа, который расширяется до Integer.

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

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

Boolean

SByte

Byte

Short

UShort

Integer

UInteger

Long

ULong

Boolean

Short

SByte

Short

Short

Целое число

Целое число

Long

Long

Десятичное число

SByte

SByte

SByte

Short

Short

Целое число

Целое число

Long

Long

Десятичное число

Byte

Short

Short

Byte

Short

UShort

Целое число

UInteger

Long

ULong

Short

Short

Short

Short

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

Short

SByte

Short

Short

Целое число

Целое число

Long

Long

Long

SByte

SByte

SByte

Short

Short

Целое число

Целое число

Long

Long

Long

Byte

Short

Short

Byte

Short

UShort

Целое число

UInteger

Long

ULong

Short

Short

Short

Short

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Тип данных Boolean (Visual Basic). То же самое верно для логических операций (And AndAlso Not, Or, OrElse, Xor) на операндах типа Boolean.

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

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

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

Поразрядный оператор Not

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

Boolean

SByte

Byte

Short

UShort

Integer

UInteger

Long

ULong

Not

Boolean

SByte

Byte

Short

UShort

Целое число

UInteger

Long

ULong

При операнде Decimal, Single Double или String, Visual Basic попытается преобразовать его в Long перед выполнением операции, и тип данных результата будет Long.

Поразрядные операторы And, Or и Xor

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

Boolean

SByte

Byte

Short

UShort

Integer

UInteger

Long

ULong

Boolean

Boolean

SByte

Short

Short

Целое число

Целое число

Long

Long

Long

SByte

SByte

SByte

Short

Short

Целое число

Целое число

Long

Long

Long

Byte

Short

Short

Byte

Short

UShort

Целое число

UInteger

Long

ULong

Short

Short

Short

Short

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 или String, Visual Basic попытается преобразовать в Long перед выполнением операции, и тип данных результата будет тот же, как при операнде типа Long.

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

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

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

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

См. также

Ссылки

Сводка типов данных (Visual Basic)

Порядок применения операторов в Visual Basic

Список операторов, сгруппированных по функциональному назначению (Visual Basic)

Арифметические операторы (Visual Basic)

Операторы сравнения (Visual Basic)

Оператор Option Strict

Основные понятия

Операторы и выражения в Visual Basic

Арифметические операторы в Visual Basic

Операторы сравнения в Visual Basic

Другие ресурсы

Операторы (Visual Basic)