Operadores aritméticos en Visual Basic

Los operadores aritméticos se usan para realizar muchas de las operaciones aritméticas conocidas que implican el cálculo de valores numéricos representados por literales, variables, otras expresiones, llamadas a funciones y propiedades y constantes. También clasificados con operadores aritméticos son los operadores de desplazamiento de bits, que actúan en el nivel de los bits individuales de los operandos y desplazan sus patrones de bits a la izquierda o derecha.

Operaciones aritméticas

Puedes agregar dos valores en una expresión junto con el operador + o restar uno de otro con - Operator (Visual Basic), como se muestra en el ejemplo siguiente.

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

La negación también usa el operador - Operator (Visual Basic), pero con un solo operando, como se muestra en el ejemplo siguiente.

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

La multiplicación y la división usan el operador * yel operador / (Visual Basic), respectivamente, como se muestra en el ejemplo siguiente.

Dim y As Double
y = 45 * 55.23
y = 32 / 23

La exponenciación usa el operador ^, como se muestra en el ejemplo siguiente.

Dim z As Double
z = 23 ^ 3
' The preceding statement sets z to 12167 (the cube of 23).

La división de enteros se lleva a cabo mediante el operador \ (Visual Basic). La división de enteros devuelve el cociente, es decir, el entero que representa el número de veces que el divisor puede dividirse en el dividendo sin tener en cuenta ningún resto. Tanto el divisor como el dividendo deben ser tipos enteros (SByte, Byte, Short, UShort, Integer, UInteger, Longy ULong) para este operador. Todos los demás tipos se deben convertir primero en un tipo entero. En el ejemplo siguiente se muestra la división de enteros.

Dim k As Integer
k = 23 \ 5
' The preceding statement sets k to 4.

La aritmética del módulo se realiza mediante el operador Mod. Este operador devuelve el resto después de dividir el divisor en el dividendo un número entero de veces. Si tanto divisor como dividendo son tipos enteros, el valor devuelto es entero. Si divisor y dividendo son tipos de punto flotante, el valor devuelto también es de punto flotante. El siguiente ejemplo demuestra este comportamiento.

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.

Intento de división por cero

La división por cero tiene resultados diferentes en función de los tipos de datos implicados. En divisiones integrales (SByte, Byte, Short, UShort, Integer, UInteger, Long, ULong) .NET Framework produce una excepción DivideByZeroException. En las operaciones de división en el tipo de datos Decimal o Single, .NET Framework también produce una excepción DivideByZeroException.

En divisiones de punto flotante que implican el Double tipo de datos, no se produce ninguna excepción y el resultado es el miembro de clase que representa NaN, PositiveInfinityo NegativeInfinity, dependiendo del dividendo. En la tabla siguiente se resumen los distintos resultados de intentar dividir un Double valor por cero.

Tipo de datos de dividendos Tipo de datos divisor Valores del dividendo Resultado
Double Double 0 NaN (no un número definido matemáticamente)
Double Double > 0 PositiveInfinity
Double Double < 0 NegativeInfinity

Al detectar una excepción DivideByZeroException, puede usar sus miembros para ayudarle a controlarla. Por ejemplo, la propiedad Message contiene el texto del mensaje para la excepción. Para obtener más información, vea Instrucción Try...Catch...Finally (Visual Basic).

Operadores de desplazamiento

Una operación de desplazamiento de bits realiza un cambio aritmético en un patrón de bits. El patrón se encuentra en el operando de la izquierda, mientras que el operando de la derecha especifica el número de posiciones que se van a desplazar. Puedes desplazar el patrón a la derecha con el >> operador o a la izquierda con el << Operador.

El tipo de datos del operando de patrón debe ser SByte, Byte, Short, UShort, Integer, UInteger, Longo ULong. El tipo de datos del operando shift amount debe ser Integer o debe ampliarse a Integer.

Los desplazamientos aritméticos no son circulares, lo que significa que los bits desplazados fuera de un extremo del resultado no se vuelven a introducir en el otro extremo. Las posiciones de bits vacías por un desplazamiento se establecen de la siguiente manera:

  • 0 para un desplazamiento aritmético a la izquierda

  • 0 para un desplazamiento aritmético a la derecha de un número positivo

  • 0 para un desplazamiento aritmético a la derecha de un tipo de datos sin signo (Byte, UShort, UInteger, ULong)

  • 1 para un desplazamiento aritmético a la derecha de un número negativo (SByte, Short, Integero Long)

En el ejemplo siguiente se desplaza un Integer valor tanto a la izquierda como a la derecha.

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.

Los desplazamientos aritméticos nunca generan excepciones de desbordamiento.

Operaciones bit a bit

Además de ser operadores lógicos, Not, Or, And y Xor también realizan aritmética bit a bit cuando se usan en valores numéricos. Para obtener más información, consulta «Operaciones Bitwise» enOperadores lógicos y bit a bit en Visual Basic.

Seguridad de tipos

Normalmente, los operandos deben ser del mismo tipo. Por ejemplo, si vas a agregar una Integer variable, debes agregarla a otra Integer variable y también asignar el resultado a una variable de tipo Integer.

Una manera de garantizar una buena práctica de codificación segura para tipos es usar la instrucción Option Strict. Si estableces Option Strict On, Visual Basic realiza automáticamente conversiones seguras para tipos. Por ejemplo, si intentas agregar una Integer variable a una Double variable y asignar el valor a una Double variable, la operación continúa normalmente, ya que un Integer valor se puede convertir Double a sin pérdida de datos. Las conversiones no seguras de tipos, por otro lado, provocan un error del compilador con Option Strict On. Por ejemplo, si intentas agregar una Integer variable a una Double variable y asignar el valor a una Integer variable, se produce un error del compilador, ya que una Double variable no se puede convertir implícitamente en el tipo Integer.

Sin embargo, si estableces Option Strict Off, Visual Basic permite que se produzcan conversiones de restricción implícitas, aunque pueden dar lugar a la pérdida inesperada de datos o precisión. Por este motivo, se recomienda usar Option Strict On al escribir código de producción. Para obtener más información, consulta Widening and Narrowing Conversions.

Consulte también