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


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

Арифметические операторы используются для выполнения многих знакомых арифметических операций, которые включают вычисление числовых значений, представленных литералами, переменными, другими выражениями, вызовами функций и свойств и константами. Кроме того, классифицированы арифметическими операторами являются операторы бит-shift, которые действуют на уровне отдельных бит операндов и сдвигают их битовые шаблоны влево или вправо.

Арифметические операции

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

Dim x As Integer
x = 67 + 34
x = 32 - 12

Отрицание также использует оператор - (Visual Basic), но только с одним операндом, как показано в следующем примере.

Dim x As Integer = 65
Dim y As Integer
y = -x

Умножение и деление используют оператор * и оператор /(Visual Basic) соответственно, как показано в следующем примере.

Dim y As Double
y = 45 * 55.23
y = 32 / 23

Экспонентация использует оператор ^, как показано в следующем примере.

Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

Целочисленный раздел выполняется с помощью оператора \ (Visual Basic). Целочисленное деление возвращает кворот, то есть целое число, представляющее количество раз, когда делитель может разделиться на дивиденды без учета каких-либо оставшихся элементов. Делитель и дивиденды должны быть целочисленными типами (SByte,, ShortByte, UShort, UIntegerIntegerLong, иULong) для этого оператора. Сначала все остальные типы должны быть преобразованы в целочисленный тип. В следующем примере демонстрируется целочисленная деление.

Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

Модуль арифметики выполняется с помощью оператора Mod. Этот оператор возвращает оставшуюся часть после деления делителя на дивиденд целое число раз. Если оба делителя и дивиденды являются целочисленными типами, возвращаемое значение является целочисленным. Если делитель и дивиденды являются типами с плавающей запятой, возвращаемое значение также является плавающей запятой. В следующем примере показано это поведение.

Dim x As Integer = 100
Dim y As Integer = 6
Dim z As Integer
z = x Mod y
' The preceding statement sets z to 4.
Dim a As Double = 100.3
Dim b As Double = 4.13
Dim c As Double
c = a Mod b
' The preceding statement sets c to 1.18.

Попытка деления на ноль

Деление по нулю имеет разные результаты в зависимости от используемых типов данных. В целочисленных делениях (SByte, IntegerUShortUIntegerShortByte, , Long) ULongплатформа .NET Framework вызывает DivideByZeroException исключение. В операциях деления с типом DecimalSingle данных платформа .NET Framework также вызывает DivideByZeroException исключение.

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

Тип данных дивидендов Тип данных divisor Дивидендная стоимость Результат
Double Double 0 NaN (не математически определенное число)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

При перехвате DivideByZeroException исключения можно использовать его члены, чтобы помочь вам справиться с ним. Например, Message свойство содержит текст сообщения для исключения. Дополнительные сведения см. в разделе Оператор Try...Catch...Finally.

Операции bit-shift

Операция битового смещения выполняет арифметический сдвиг по битовой схеме. Шаблон содержится в операнде слева, а операнд справа указывает количество позиций для перемещения шаблона. Шаблон можно переместить вправо с оператором >> или влево с << помощью оператора.

Тип данных операнда шаблона должен быть SByte, ByteShort, UShort, , , Integer, UIntegerLongили ULong. Тип данных операнда сдвига должен быть Integer или должен быть расширен до Integer.

Арифметические сдвиги не циклические, что означает, что биты смещены с одного конца результата не повторно введены в другой конец. Битовые позиции, освобожденные сменой, задаются следующим образом:

  • 0 для арифметической левой смены

  • 0 для арифметического сдвига вправо положительного числа

  • 0 для арифметического изменения правого типа данных без знака (Byte, , UShortUInteger) ULong

  • 1 для арифметического сдвига вправо отрицательного числа (SByte,, ShortIntegerилиLong)

В следующем примере значение перемещается Integer как влево, так и вправо.

Dim lResult, rResult As Integer
Dim pattern As Integer = 12
' The low-order bits of pattern are 0000 1100.
lResult = pattern << 3
' A left shift of 3 bits produces a value of 96.
rResult = pattern >> 2
' A right shift of 2 bits produces value of 3.

Арифметические сдвиги никогда не создают исключения переполнения.

Поразрядные операции

Помимо логических операторов, Not, Or, Andа Xor также выполнения битовой арифметики при использовании числовых значений. Дополнительные сведения см. в разделе "Побитовые операции" в логических и битовых операторах в Visual Basic.

Безопасность типа

Операнды обычно должны иметь одинаковый тип. Например, если вы добавляете переменную Integer , ее следует добавить в другую Integer переменную, и вы также должны назначить результат переменной типа Integer .

Одним из способов обеспечения хорошей практики кодирования с безопасным типом является использование инструкции Option Strict. Если заданоOption Strict On, Visual Basic автоматически выполняет типобезопасные преобразования. Например, если вы пытаетесь добавить Integer переменную в переменную Double и назначить значение Double переменной, операция выполняется нормально, так как Integer значение можно преобразовать в Double без потери данных. С другой стороны, небезопасные преобразования типа вызывают ошибку Option Strict Onкомпилятора. Например, если вы пытаетесь добавить Integer переменную в переменную и назначить значение Integer переменнойDouble, результаты ошибки компилятора, поскольку Double переменная не может быть неявно преобразована в типInteger.

Однако если задано Option Strict Off, Visual Basic позволяет выполнять неявные сужающие преобразования, хотя они могут привести к неожиданной потере данных или точности. По этой причине рекомендуется использовать Option Strict On при написании рабочего кода. Для получения дополнительной информации см. Widening and Narrowing Conversions.

См. также