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

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

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

Можно сложить два значения в выражении с помощью оператора Оператор + (Visual Basic) или вычесть одно из другого с помощью оператора Оператор - (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) и Оператор / (Visual Basic), как показано в следующем примере.

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

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

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

Целочисленное деление выполняется с помощью оператора Оператор \ (Visual Basic). Целочисленное деление возвращает частное, т.е. целое число, представляющее — сколько раз делимое делится на делитель без остатка. Делитель и делимое должны быть целыми типами (SByte, Byte, Short, UShort, Integer, UInteger, Long и ULong) для использования данного оператора. Все другие типы сначала необходимо преобразовать к целому типу. Ниже представлен пример целочисленного деления.

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

Арифметическая операция деления с остатком выполняется с помощью Оператор Mod (Visual Basic). Этот оператор возвращает остаток от деления делимого на делитель целое количество раз. Если делитель и делимое являются целыми типами, возвращенное значение является целым. Если делитель и делимое являются типами с плавающей запятой, возвращенное значение также является переменной с плавающей запятой. Следующий пример иллюстрирует такое поведение.

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, Byte, Short, UShort, Integer, UInteger, Long, ULong), .NET Framework формирует исключение DivideByZeroException. При операциях деления с типом данных Decimal или Single .NET Framework также формирует исключение DivideByZeroException.

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

Тип данных делимого

Тип данных делителя

Значение делимого

Результат

Double

Double

0

NaN (не заданное математически число)

Double

Double

> 0

PositiveInfinity

Double

Double

< 0

NegativeInfinity

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

Операции поразрядного сдвига

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

Тип данных сдвигаемого операнда должен быть SByte, Byte, Short, UShort, Integer, UInteger, Long или ULong. Тип данных операнда количества разрядов сдвига должен быть Integer или его необходимо расширить до Integer.

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

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

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

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

  • 1 для арифметического сдвига вправо отрицательного числа (SByte, Short, Integer или 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 к переменной типа Double и присвоении значения переменной типа Integer, возникнет ошибка компилятора, поскольку переменную типа Double нельзя неявно преобразовать в тип Integer.

Но если задать Option Strict Off, Visual Basic позволяет использовать неявные сужающие (небезопасные) преобразования, хотя они могут привести к потере данных или точности. По этой причине рекомендуется использовать Option Strict On при написании конечного кода. Дополнительные сведения см. в разделе Расширяющие и сужающие преобразования (Visual Basic).

См. также

Ссылки

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

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

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

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

Операторы объединения в Visual Basic

Логические и побитовые операторы в Visual Basic

Эффективное сочетание операторов (Visual Basic)