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


Арифметические операторы в 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) соответственно, как показано в следующем примере.

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,, ByteShort, UShort, IntegerUIntegerLong, и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 значения на ноль.

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

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

Операции Bit-Shift

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

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

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

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

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

  • 0 для арифметического сдвига вправо беззнакового типа данных (Byte, UShort, UInteger, 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 с переменной Double и присвоить значение переменной Integer, возникнет ошибка компилятора, так как переменная Double не может быть неявно преобразована в тип Integer.

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

См. также