Operadores lógicas e bit a bit no Visual Basic

Operadores lógicos comparam Boolean expressões e retornar uma Boolean resultado. The And, Or, AndAlso, OrElse, e Xor os operadores são binário porque eles levam dois operandos, enquanto o Not o operador é unário porque leva um único operando.Alguns desses operadores também podem executar operações lógicas bit a bit em valores integrais.

Operador lógico unário

The Operador Not (Visual Basic) executa a lógica negação on a Boolean expressão. Ele gera o oposto de lógico do seu operando.Se a expressão for avaliada como True, em seguida, Not Retorna False; Se a expressão for avaliada como False, em seguida, Not Retorna True. O exemplo a seguir ilustra isto:

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 binário

The Operador And (Visual Basic) executa a lógica conjunto on two Boolean expressões. Se as duas expressões são avaliados como True, em seguida, And Retorna True. Se pelo menos uma das expressões for avaliada como False, em seguida, And Retorna False.

The Operador Or (Visual Basic) executa a lógica disjunção or inclusão on two Boolean expressões. Se qualquer expressão for avaliada como True, ou ambos avaliada como True, em seguida, Or Retorna True. Se nenhuma expressão for avaliada como True, Or Retorna False.

The Operador Xor (Visual Basic) executa a lógica exclusão on two Boolean expressões. Se exatamente uma expressão for avaliada como True, mas não ambos Xor Retorna True. Se as duas expressões são avaliados como True ou ambos avaliada como False, Xor Retorna False.

O exemplo a seguir ilustra o And, Or, e Xor operadores.

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.

Short-Circuiting operações lógicas

The Operador AndAlso é muito parecido com o And operador, que também executa conjunção lógica em duas Boolean expressões. A principal diferença entre os dois é que AndAlso apresenta Short-circuiting comportamento.Se a primeira expressão em um AndAlso expressão é avaliada como False, em seguida, a segunda expressão não será avaliada porque ele não é possível alterar o resultado final, e AndAlso Retorna False.

Da mesma forma, a Operador OrElse executa a disjunção lógica em duas short-circuiting Boolean expressões. Se a primeira expressão em um OrElse expressão é avaliada como True, em seguida, a segunda expressão não será avaliada porque ele não é possível alterar o resultado final, e OrElse Retorna True.

Trade-offs short-Circuiting

Short-circuiting pode melhorar o desempenho por não avaliar uma expressão que não é possível alterar o resultado da operação lógica.No entanto, se essa expressão executa ações adicionais, short-circuiting ignora essas ações.Por exemplo, se a expressão incluir uma telefonar para um Function procedimento, esse procedimento não é chamado se a expressão é short-circuited e qualquer código adicional contidas no Function não é executado. Se a lógica do programa depende de qualquer código adicional, você deve evitar provavelmente operadores de curto-circuito.

O exemplo a seguir ilustra a diferença entre And, Ore suas contrapartes curto-circuito.

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

No exemplo anterior, observe que alguns códigos importante dentro de checkIfValid() não é executado quando a telefonar é short-circuited. O primeiro If chamadas de demonstrativo checkIfValid() mesmo que 12 > 45 Retorna False, pois And não circuito curto. O segundo If demonstrativo não telefonar checkIfValid(), porque quando 12 > 45 Retorna False, AndAlso Short-circuits a segunda expressão. O terceiro If chamadas de demonstrativo checkIfValid() mesmo que 12 < 45 Retorna True, pois Or não circuito curto. O quarto If demonstrativo não chama checkIfValid(), porque quando 12 < 45 Retorna True, OrElse Short-circuits a segunda expressão.

Operações Bitwise (bit a bit)

Operações bit a bit avaliam dois valores integrais no formulário binário (base 2).Eles comparam os bits em posições correspondentes e, em seguida, atribuem valores com base na comparação.O exemplo a seguir ilustra o And operador.

Dim x As Integer
x = 3 And 5

O exemplo anterior define o valor de x 1. Isso acontece pelas seguintes razões:

  • sistema autônomo valores são tratados sistema autônomo binário:

    3 em binário formulário = 011

    5 no binário formulário = 101

  • The And operador compara o binário representações, uma binário posição (bits) por vez. Se os dois bits em uma determinada posição 1, 1 é colocado na posição no resultado.Se qualquer bit for 0, 0 será colocado naquela posição no resultado.No exemplo anterior isso funciona da seguinte maneira:

    011 (3 em binário formulário)

    101 (5 no binário formulário)

    001 (O resultado, no formato binário)

  • O resultado é tratado sistema autônomo Decimal.O valor 001 é a representação binária do caso 1, x = 1.

O bit a bit Or operação é semelhante, exceto que um 1 é atribuído ao bit resultado se um ou ambos dos bits comparados for 1. Xor atribui um 1 para o bit de resultado se exatamente um dos bits comparados (não ambos) é 1. Not toma um único operando e inverte todos os bits, incluindo o bit de sinal e atribui esse valor para o resultado. Isso significa que para assinado números positivos, Not sempre retorna um valor negativo e para números negativos, Not sempre retorna um positivo ou o valor zero.

The AndAlso e OrElse operadores não oferecem suporte a operações bit a bit.

Observação:

Operações bit a bit podem ser executadas em apenas tipos integrais.Valores de ponto flutuante devem ser convertidos em tipos integrais antes de continuar com operação bit a bit.

Consulte também

Conceitos

Expressões booleanas

Operadores aritméticos em Visual Basic

Operadores de Comparação em Visual Basic

Operadores de concatenação no Visual Basic

Eficiente combinação de operadores

Referência

Operadores Lógicos/Bit a bit