Типы данных результатов оператора (Visual Basic)
Visual Basic определяет тип результирующих данных операции на основе типов данных операндов. В некоторых случаях это может быть тип данных с большим диапазоном, чем любой операнды.
Диапазоны типов данных
Диапазоны соответствующих типов данных в порядке от наименьшего до наибольшего, приведены ниже.
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
или Mod
Double
Visual 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
значение , Single
Double
или String
Visual 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
определены только для Boolean
visual Basic, и Visual Basic преобразует каждый операнд в Boolean
соответствии с необходимостью перед выполнением операции.
=, <>, <><, =, и >= Операторы
Если оба операнда являются Boolean
, Visual Basic считает True
меньше False
. Если числовой тип сравнивается с типом String
, Visual Basic пытается преобразовать его String
Double
перед операцией. Date
Операнду Char
можно сравнить только с другим операндом одного типа данных. Тип данных результата всегда Boolean
.
Побитовая не оператор
В следующей таблице показаны типы данных результатов для побитового Not
оператора.
Boolean |
SByte |
Byte |
Short |
UShort |
Integer |
UInteger |
Long |
ULong |
|
---|---|---|---|---|---|---|---|---|---|
Not |
Логический | SByte | Байт | Короткие | UShort | Целое | UInteger | Long | ULong |
Если операнд имеет Decimal
значение , Double
Single
или String
Visual Basic пытается преобразовать его в Long
операцию до операции, а тип результирующих данных — Long
.
Побитовые и, или, а также операторы Xor
В следующей таблице показаны типы данных результатов для побитовых And
Or
операторов и 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
значение , Double
Single
или String
Visual Basic пытается преобразовать его Long
до операции, а тип результирующих данных совпадает с тем же типом данных, что и если операнды уже былиLong
.
Прочие операторы
Оператор &
определяется только для объединения String
операндов. Visual Basic преобразует каждый операнд в соответствии с необходимостью String
перед операцией, а тип данных результата всегда String
. Для целей &
оператора все преобразования, которые String
будут рассматриваться как расширенные, даже если Option Strict
есть On
.
IsNot
Операторы Is
требуют, чтобы оба операнда были ссылочным типом. Выражение TypeOf
...Is
требует, чтобы первый операнд был ссылочным типом, а второй операнду — именем типа данных. Во всех этих случаях тип результирующих данных имеет тип Boolean
данных.
Оператор Like
определяется только для сопоставления шаблонов String
операндов. Visual Basic пытается преобразовать каждый операнд в соответствии с необходимостью String
перед операцией. Тип данных результата всегда Boolean
.