Operadores aritméticos no Visual Basic
Os operadores aritméticos são usados para executar muitas das operações aritméticas familiares que envolvem o cálculo de valores numéricos representados por literais, variáveis, outras expressões, chamadas de função e propriedade e constantes. Também classificados com operadores aritméticos são os operadores de turno de bit, que atuam no nível dos bits individuais dos operandos e deslocam seus padrões de bit para a esquerda ou direita.
Operações Aritméticas
Você pode adicionar dois valores em uma expressão junto com o operador + ou subtrair um do outro com o operador - (Visual Basic), como demonstra o exemplo a seguir.
Dim x As Integer
x = 67 + 34
x = 32 - 12
A negação também usa o operador – (Visual Basic), mas com apenas um operando, como demonstra o exemplo a seguir.
Dim x As Integer = 65
Dim y As Integer
y = -x
Multiplicação e divisão usam o operador * e /operador (Visual Basic), respectivamente, como demonstra o exemplo a seguir.
Dim y As Double
y = 45 * 55.23
y = 32 / 23
A exponencialização usa o operador ^, como demonstra o exemplo a seguir.
Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).
A divisão de inteiros é realizada usando o operador \ (Visual Basic). A divisão inteiro retorna o quociente, ou seja, o inteiro que representa o número de vezes que o divisor pode dividir no dividendo sem considerar nenhum restante. Tanto o divisor quanto o dividendo devem ser tipos integrais (SByte
, Byte
, Short
, UShort
, Integer
, UInteger
, Long
e ULong
) para esse operador. Todos os outros tipos devem ser convertidos em um tipo integral primeiro. O exemplo a seguir demonstra a divisão de inteiros.
Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.
A aritmética modulus é executada usando o Operador Mod. Esse operador retorna o restante depois de dividir o divisor no dividendo um número integral de vezes. Se divisor e dividendo forem tipos integrais, o valor retornado será integral. Se divisor e dividendo forem tipos de ponto flutuante, o valor retornado também será ponto flutuante. O exemplo a seguir demonstra esse comportamento.
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.
Tentativa de Divisão por Zero
A divisão por zero tem resultados diferentes, dependendo dos tipos de dados envolvidos. Em divisões integrais (SByte
, Byte
, Short
, UShort
, Integer
, UInteger
, , Long
, ), ULong
o .NET Framework lança uma DivideByZeroException exceção. Em operações de divisão no Decimal
tipo de dados ou Single
no tipo de dados, o .NET Framework também gera uma DivideByZeroException exceção.
Em divisões de ponto flutuante envolvendo o Double
tipo de dados, nenhuma exceção é gerada e o resultado é o membro da classe que representa NaN, PositiveInfinityou NegativeInfinity, dependendo do dividendo. A tabela a seguir resume os vários resultados da tentativa de dividir um Double
valor por zero.
Tipo de dados de dividendos | Tipo de dados divisor | Valor do dividendo | Result |
---|---|---|---|
Double |
Double |
0 | NaN (não é um número matematicamente definido) |
Double |
Double |
> 0 | PositiveInfinity |
Double |
Double |
< 0 | NegativeInfinity |
Ao capturar uma DivideByZeroException exceção, você pode usar seus membros para ajudá-lo a lidar com ela. Por exemplo, a Message propriedade contém o texto da mensagem para a exceção. Para obter mais informações, consulte Instrução Try...Catch...Finally.
Operações de Bit-Shift
Uma operação de turno de bits executa uma mudança aritmética em um padrão de bit. O padrão está contido no operando à esquerda, enquanto o operando à direita especifica o número de posições para mudar o padrão. Você pode mudar o padrão para a direita com o >> Operador ou para a esquerda com o << Operador.
O tipo de dados do operando padrão deve ser SByte
, Byte
, Short
, UShort
, Integer
, UInteger
, Long
ou ULong
. O tipo de dados do operando de quantidade de deslocamento deve ser ou deve ser Integer
ampliado para Integer
.
Os deslocamentos aritméticos não são circulares, o que significa que os bits deslocados de uma extremidade do resultado não são reintroduzidos na outra extremidade. As posições de bit desocupadas por um turno são definidas da seguinte maneira:
0 para um turno aritmético à esquerda
0 para uma mudança aritmética para a direita de um número positivo
0 para uma mudança aritmética à direita de um tipo de dados não assinado (
Byte
,UShort
,UInteger
,ULong
)1 para uma mudança aritmética para a direita de um número negativo (
SByte
,Short
,Integer
ouLong
)
O exemplo a seguir desloca um Integer
valor para a esquerda e para a direita.
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.
As mudanças aritméticas nunca geram exceções de estouro.
Operações bit a bit
Além de serem operadores lógicos, Not
, Or
, And
e Xor
também executarem aritmética bit a bit quando usados em valores numéricos. Para obter mais informações, consulte "Operações bit a bit" em operadores lógicos e bits no Visual Basic.
Segurança de tipos
Os operandos normalmente devem ser do mesmo tipo. Por exemplo, se você estiver fazendo adição com uma Integer
variável, deverá adicioná-la a outra Integer
variável e atribuir o resultado a uma variável de tipo Integer
também.
Uma maneira de garantir uma boa prática de codificação com segurança de tipo é usar a Instrução Opção Estrita. Se você definir Option Strict On
, o Visual Basic executará automaticamente conversões de tipo seguro. Por exemplo, se você tentar adicionar uma Integer
variável a uma Double
variável e atribuir o valor a uma Double
variável, a operação continuará normalmente, pois um Integer
valor pode ser convertido Double
sem perda de dados. As conversões não seguras de tipo, por outro lado, causam um erro do compilador com Option Strict On
. Por exemplo, se você tentar adicionar uma Integer
variável a uma Double
variável e atribuir o valor a uma Integer
variável, um erro do compilador resultará, pois uma Double
variável não pode ser convertida implicitamente em tipo Integer
.
Se você definir Option Strict Off
, no entanto, o Visual Basic permitirá que conversões implícitas de estreitamento ocorram, embora elas possam resultar na perda inesperada de dados ou precisão. Por esse motivo, recomendamos que você use Option Strict On
ao escrever código de produção. Para obter mais informações, consulte Ampliando e restringindo conversões.