Operadores lógicos e bit a bit em 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 o 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 (Visual Basic) executa a lógica negação em um Boolean expressão.Ela produz 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ários
O E o operador (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 Ou o operador (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-circuitando operações lógicas
O Operador AndAlso (Visual Basic) é muito semelhante do 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 curto-circuitando 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 a disjunção lógica em duas de curto-circuitando 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-circuitando Trade-offs básicos
Curto-circuitando 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, curto-circuitando ignora essas ações.Por exemplo, se a expressão inclui uma chamada para um Function procedimento, o procedimento não é chamado se a expressão for short-circuited e qualquer código adicional contidas a Function não é executado.Portanto, a função pode ser executado apenas ocasionalmente e não pode ser testada corretamente.Ou a lógica do programa pode depender do código do Function.
O exemplo a seguir ilustra a diferença entre And, Ore suas contrapartes de 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 chamada é short-circuited.O primeiro If chamadas de instrução checkIfValid() , mesmo que 12 > 45 retorna False, pois And realiza circuito curto.A segunda If declaração não chama checkIfValid(), porque quando 12 > 45 retorna False, AndAlso short-circuits a segunda expressão.O terceiro If chamadas de instrução checkIfValid() , mesmo que 12 < 45 retorna True, pois Or realiza circuito curto.A quarta If declaração 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 como 1.Isso acontece pelas seguintes razões:
Os valores são tratados como binário:
3 no formato binário = 011
5 na forma binária = 101
O And operador compara as representações binárias, uma posição de binária (bits) por vez.Se os dois bits em uma determinada posição 1, 1 é colocado naquela posição no resultado.Se o bit for 0, 0 é colocado naquela posição no resultado.No exemplo anterior isso funciona da seguinte maneira:
011 (3 no formato binário)
101 (5 na forma binária)
001 (O resultado, no formato binário)
O resultado é tratado como decimais.O valor 001 é a representação binária do 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 for 1.Xoratribui um 1 bit o resultado se exatamente um dos bits comparados (não ambos) é 1.Notleva 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 o valor zero.
O 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 somente tipos integrais.Valores de ponto flutuante devem ser convertidos para tipos integrais antes de prosseguir com a operação bit a bit. |
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