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 deslocamento de bits, que atuam no nível dos bits individuais dos operandos e deslocam seus padrões de bits 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 o exemplo a seguir demonstra.
Dim y As Double
y = 45 * 55.23
y = 32 / 23
A exponenciaçã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 inteira é realizada usando o operador \ (Visual Basic). A divisão inteira retorna o quociente, ou seja, o inteiro que representa o número de vezes que o divisor pode dividir no dividendo sem considerar qualquer resto. Tanto o divisor como o dividendo devem ser tipos integrais (SByte
, Byte
, Short
, UShort
, Integer
, Long
UInteger
, , e ULong
) para este operador. Todos os outros tipos devem ser convertidos em um tipo integral primeiro. O exemplo a seguir demonstra a divisão inteira.
Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.
A aritmética do módulo é realizada usando o operador Mod. Este operador devolve o restante depois de dividir o divisor no dividendo um número integral de vezes. Se tanto o divisor quanto o dividendo forem tipos integrais, o valor retornado será integral. Se divisor e dividendo são tipos de ponto flutuante, o valor retornado também é 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
, , UShort
Short
, , UInteger
Integer
, Long
, ), ULong
o .NET Framework lança uma DivideByZeroException exceção. Em operações de Decimal
Single
divisão no ou tipo de dados, o .NET Framework também lança uma DivideByZeroException exceção.
Em divisões de ponto flutuante envolvendo o Double
tipo de dados, nenhuma exceção é lançada, 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 do divisor | Valor dos dividendos | Result |
---|---|---|---|
Double |
Double |
0 | NaN (não é um número matematicamente definido) |
Double |
Double |
> 0 | PositiveInfinity |
Double |
Double |
< 0 | NegativeInfinity |
Quando você pega uma DivideByZeroException exceção, você pode usar seus membros para ajudá-lo a lidar com ela. Por exemplo, a Message propriedade mantém o texto da mensagem para a exceção. Para obter mais informações, consulte Tentar... Pegar... Finalmente Declaração.
Operações Bit-Shift
Uma operação de deslocamento de bits executa um deslocamento aritmético em um padrão de bits. O padrão está contido no operando à esquerda, enquanto o operando à direita especifica o número de posições para deslocar o padrão. Você pode deslocar 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 forma:
0 para um desvio aritmético para a esquerda
0 para um desvio aritmético para a direita de um número positivo
0 para um desvio aritmético para a direita de um tipo de dados não assinado (
Byte
,UShort
,UInteger
,ULong
)1 para um desvio aritmético 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.
Mudanças aritméticas nunca geram exceções de estouro.
Operações Bitwise
Além de serem operadores lógicos, Not
, Or
, And
, e Xor
também executam aritmética bitwise quando usados em valores numéricos. Para obter mais informações, consulte "Operações Bitwise" em Operadores lógicos e bitwise no Visual Basic.
Segurança do tipo
Os operandos devem normalmente 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 também deverá atribuir o resultado a uma variável do tipo Integer
.
Uma maneira de garantir uma boa prática de codificação segura para tipos é usar a Declaração Estrita de Opção. Se você definir Option Strict On
, o Visual Basic executará automaticamente conversões seguras para tipos. 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 prosseguirá normalmente, porque um Integer
valor pode ser convertido em Double
sem perda de dados. Conversões não seguras de tipo, por outro lado, causam um erro de 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á, porque uma Double
variável não pode ser implicitamente convertida em tipo Integer
.
Se você definir Option Strict Off
, no entanto, o Visual Basic permite que conversões de estreitamento implícitas 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.