LOS OPERADORES LOGICOS EN VISUAL BASIC

Los operadores lógicos comparan expresiones Boolean y devuelven un resultado Boolean.  And ,OrAndAlsoOrElse y Xor son binarios porque toman dos operandos, mientras que el operador Not es unarioporque toma un solo operando. Algunos de estos operadores también pueden realizar operaciones lógicas bit a bit en valores enteros.

Operador lógico unarioEl Not (Operador, Visual Basic) realiza la negación lógica en una expresión BooleanProduce el contrario lógico de su operando. TrueNot devuelve False; si la expresión se evalúa como False,Not devuelve TrueDebido a que Object es la clase base de todos los tipos de referencia en .NET Framework, este comportamiento es heredado por los tipos de referencia que no reemplazan el método ToString.

 
Dim x, y As Boolean
x = Not 23 > 14
y = Not 23 > 67
' The preceding statements set x to False and y to True.


Operadores lógicos binarios

El And (Operador, Visual Basic) realiza la conjunción lógica de dos expresiones BooleanTrueAnd devuelve TrueFalseAnd devuelveFalse.

El Or (Operador, Visual Basic) realiza la disyunción o inclusión lógicas de dos expresiones BooleanTrueOr devuelve TrueTrueOr devuelve False.

Xor (Operador, Visual Basic) realiza la exclusión lógica de dos expresiones BooleanTrueXor devuelve TrueTrueo como FalseXor devuelve False.

AndOr y Xor.

 
Dim a, b, c, d, e, f, g As Boolean

a = 23 > 14 And 11 > 8
b = 14 > 23 And 11 > 8
' The preceding statements set a to True and b to False.

c = 23 > 14 Or 8 > 11
d = 23 > 67 Or 8 > 11
' The preceding statements set c to True and d to False.

e = 23 > 67 Xor 11 > 8
f = 23 > 14 Xor 11 > 8
g = 14 > 23 Xor 8 > 11
' The preceding statements set e to True, f to False, and g to False.


Cortocircuitar las operaciones lógicas

El AndAlso (Operador, Visual Basic) es muy similar al operador And, ya que también realiza la conjunción lógica de dos expresiones BooleanAndAlso presenta un comportamiento de evaluación "cortocircuitada". AndAlso se evalúa como False, la segunda parte de la expresión no se evalúa porque no puede modificar el resultado final y AndAlso devuelve False.

De igual forma, el OrElse (Operador) (Visual Basic) realiza la disyunción lógica de evaluación cortocircuitada de dos expresiones BooleanOrElse se evalúa como True, la segunda parte de la expresión no se evalúa porque no puede modificar el resultado final y OrElse devuelve True.

wz3k228a.collapse_all(es-es,VS.120).gifInconvenientes de las evaluaciones cortocircuitadas

Cortocircuitar puede mejorar el rendimiento ya que no se evalúa una expresión que no puede modificar el resultado de la operación lógica. Sin embargo, si esa expresión realiza acciones adicionales, al cortocircuitar se pasan por alto esas acciones. Function, no se llama a ese procedimiento si la expresión se cortocircuita y el código adicional incluido en Function no se ejecuta. Por consiguiente, la función únicamente se puede ejecutar de vez en cuando y no se puede probar correctamente. Function.

AndOr y sus homólogos de evaluación cortocircuitada.

 
Dim amount As Integer = 12
Dim highestAllowed As Integer = 45
Dim grandTotal As Integer


 
If amount > highestAllowed And checkIfValid(amount) Then
    ' The preceding statement calls checkIfValid().
End If
If amount > highestAllowed AndAlso checkIfValid(amount) Then
    ' The preceding statement does not call checkIfValid().
End If
If amount < highestAllowed Or checkIfValid(amount) Then
    ' The preceding statement calls checkIfValid().
End If
If amount < highestAllowed OrElse checkIfValid(amount) Then
    ' The preceding statement does not call checkIfValid().
End If


 
Function checkIfValid(ByVal checkValue As Integer) As Boolean
    If checkValue > 15 Then
        MsgBox(CStr(checkValue) & " is not a valid value.")
        ' The MsgBox warning is not displayed if the call to
        ' checkIfValid() is part of a short-circuited expression.
        Return False
    Else
        grandTotal += checkValue
        ' The grandTotal value is not updated if the call to
        ' checkIfValid() is part of a short-circuited expression.
        Return True
    End If
End Function


En el ejemplo anterior, observe que una parte de código importante dentro de checkIfValid() no se ejecuta cuando se cortocircuita la llamada. If llama a checkIfValid() aunque 12 > 45 devuelveFalse, porque And no cortocircuita. If no llama a checkIfValid(), porque cuando 12 > 45 devuelve FalseAndAlso cortocircuita la segunda expresión. If llama a checkIfValid()aunque 12 < 45 devuelve True, porque Or no cortocircuita. If no llama a checkIfValid(), porque cuando 12 < 45 devuelve TrueOrElse cortocircuita la segunda expresión.

Operaciones bit a bit

Las operaciones bit a bit evalúan dos valores enteros en formato binario (base 2). Comparan los bits en las posiciones correspondientes y, a continuación, asignan valores basados en la comparación. And.

 
Dim x As Integer
x = 3 And 5


En el ejemplo anterior se establece el valor de x en 1. Esto pasa por las siguientes razones:

  • Los valores se tratan como binarios:

    3 en formato binario = 011

    5 en formato binario = 101

  • El operador And compara las representaciones binarias, una posición binaria (bit) a la vez. Si los dos bits en una posición dada son 1, entonces se coloca un 1 en esa posición del resultado. Si uno de los dos bits es 0, entonces se coloca un 0 en esa posición del resultado. En el ejemplo anterior, esto funciona como sigue:

    011 (3 en formato binario)

    101 (5 en formato binario)

    001 (el resultado, en formato binario)

  • El resultado se trata como decimal. x = 1.

La operación Or bit a bit es similar, excepto en que se asigna 1 al bit resultante si cualquiera de los bits comparados es 1. Xor asigna 1 al bit del resultado si exclusivamente uno de los bits comparados (no ambos) es 1. Not toma un solo operando e invierte todos los bits, incluido el bit de signo, y asigna ese valor al resultado.Not siempre devuelve un valor negativo y, para números negativos, Not siempre devuelve un valor positivo o cero.

AndAlso y OrElse no admiten las operaciones bit a bit.