Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Арифметические операторы используются для выполнения многих знакомых арифметических операций, которые включают вычисление числовых значений, представленных литералами, переменными, другими выражениями, вызовами функций и свойств и константами. Операторы побитовых сдвигов, которые классифицируются вместе с арифметическими операторами, действуют на уровне битов операндов и сдвигают их битовые последовательности влево или вправо.
Арифметические операции
Вы можете добавить два значения в выражение при помощи оператора + или вычесть одно из другого с оператором - (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
,, 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
значения на ноль.
Тип данных дивидендов | Тип данных делитель | Дивидендная стоимость | Результат |
---|---|---|---|
Double |
Double |
0 | NaN (не математически определенное число) |
Double |
Double |
> 0 | PositiveInfinity |
Double |
Double |
< 0 | NegativeInfinity |
При перехвате DivideByZeroException исключения можно использовать его члены для его обработки. Например, Message свойство содержит текст сообщения для исключения. Дополнительные сведения см. в статье "Попробуйте... Ловить... Наконец, оператор.
Операции Bit-Shift
Операция битового смещения выполняет арифметический сдвиг по битовой схеме. Шаблон содержится в операнде слева, а операнд справа указывает количество позиций для перемещения шаблона. Шаблон можно переместить вправо с помощью оператора>> или влево с помощью << оператора.
Тип данных операнда шаблона должен быть 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
при написании рабочего кода. Дополнительные сведения см. в разделе "Расширение и сужение преобразований".