Operadores lógicos e bit a bit no Visual Basic

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

Unário operador lógico

O Operador Not (Visual Basic) executa a lógica negação em um 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. The following example illustrates this.

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ários

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

O Operador Or (Visual Basic) executa a lógica disjunção ou inclusão em dois Boolean expressões. Se qualquer expressão for avaliada como True, ou ambos para avaliar a True, em seguida, Or retorna True. Se nenhuma expressão for avaliada como True, Or retorna False.

O Operador Xor (Visual Basic) executa a lógica exclusão em dois Boolean expressões. Se a exatamente uma expressão for avaliada como True, mas não ambos, Xor retorna True. Se as duas expressões são True ou ambos para avaliar a 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.

Curto-Circuiting operações lógicas

O Operador AndAlso (Visual Basic) é muito semelhante do Anddeoperador, que também executa conjunção lógica em duas Boolean expressões. A diferença chave entre os dois é que AndAlso apresenta curto-circuiting comportamento. Se a primeira expressão em um AndAlso expressão for avaliada como False, e em seguida, a segunda expressão é avaliada não porque ele não é possível alterar o resultado final, e AndAlso retorna False.

Da mesma forma, o Operador OrElse (Visual Basic) executa curto-o circuiting de disjunção lógica em duas Boolean expressões. Se a primeira expressão em um OrElse expressão for avaliada como True, e em seguida, a segunda expressão é avaliada não porque ele não é possível alterar o resultado final, e OrElse retorna True.

Curto-Circuiting desvantagens-

Curto-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 realiza ações adicionais, short,-circuiting ignora essas ações. Por exemplo, se a expressão inclui uma chamada para um Function procedimento, esse procedimento não é chamado se a expressão for curto-circuited e qualquer código adicional contidas no Function não executar. Portanto, a função pode ser executado apenas ocasionalmente e não pode ser testado corretamente. Ou a lógica do programa pode depender do código de Function.

O exemplo a seguir ilustra a diferença entre And, Ore seu curto-circuiting contrapartes.

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 executa quando a chamada é curta-circuited. O primeiro Ifchamadas dedemonstrativo checkIfValid() , embora 12 > 45 retorna False, pois And não curto circuito de-. A segunda Ifdemonstrativo não chama checkIfValid(), porque quando 12 > 45 retorna False, AndAlso-de curto circuitos segunda expressão. A terceira Ifchamadas dedemonstrativo checkIfValid() , embora 12 < 45 retorna True, pois Or não curto circuito de-. A quarta Ifdemonstrativo não chama checkIfValid(), porque quando 12 < 45 retorna True, OrElse-de curto circuitos segunda expressão.

Bitwise Operations

Operações bit a bit avaliam os dois valores integrais no formuláriode 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 Anddeoperador.

Dim x As Integer
x = 3 And 5

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

  • Os valores são tratados como binário:

    3 noformulário de binário= 011

    5 noformulário de binário= 101

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

    011 (3 noformuláriode binário)

    101 (5 noformuláriode binário)

    001 (O resultado, o binário formulário)

  • O resultado é tratado como um decimal. O valor 001 é a representação binário de 1, então, x = 1.

O bit a bit Or operação é semelhante, exceto que um 1 é atribuído para o bit de resultado se um ou ambos os bits comparados é 1. Xoratribui um 1 bit de resultado se exatamente um dos bits comparados (não ambos) é 1. Notleva a um único operando e inverte a todos os bits, incluindo o bit de sinal e atribui o valor do 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 zero valor.

O AndAlso e OrElse operadores não suportam operações bit a bit.

ObservaçãoObservação

Operações bit a bit podem ser executadas em somente os tipos integrais. Ponto de-valores devem ser convertidos para tipos integrais antes de continuar com a operação bit a bit de flutuante.

Consulte também

Referência

Operadores lógicos/bit a bit (Visual Basic)

Conceitos

Expressões booleanas (Visual Basic)

Operadores aritméticos em Visual Basic

Operadores de Comparação em Visual Basic

Operadores de concatenação no Visual Basic

Combinação eficiente de operadores (Visual Basic)

Histórico de alterações

Date

History

Motivo

Janeiro de 2011

Modificado curto-seção de Circuiting-desvantagens.

Aprimoramento de informações.