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

 

Последнюю документацию по Visual Studio RC 2017 г. см. в разделе документацию по версии-Кандидата Visual Studio 2017 г..

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

Можно сложить два значения в выражении с помощью оператора Оператор + или вычесть одно из другого с помощью оператора Оператор "-", как показано в следующем примере.

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

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

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

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

        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).

Целочисленное деление выполняется с помощью оператора Оператор \. Целочисленное деление возвращает частное, т.е. целое число, представляющее — сколько раз делимое делится на делитель без остатка. Делитель и делимое должны быть целыми типами (SByte, Byte, Short, UShort, Integer, UInteger, Long и 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, Byte, Short, UShort, Integer, UInteger, Long, ULong), .NET Framework формирует исключение DivideByZeroException. При операциях деления с типом данных Decimal или Single .NET Framework также формирует исключение DivideByZeroException.

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

Тип данных делимогоТип данных делителяЗначение делимогоРезультат
DoubleDouble0NaN (не заданное математически число)
DoubleDouble> 0PositiveInfinity
DoubleDouble< 0NegativeInfinity

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

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

Тип данных сдвигаемого операнда должен быть 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
Эффективное сочетание операторов

Показ: