Operador Xor (Visual Basic)

Desenvolve uma exclusão lógica em duas expressões Boolean ou uma exclusão bit a bit em duas expressões numéricas.

Sintaxe

result = expression1 Xor expression2  

Partes

result
Obrigatórios. Qualquer Boolean ou variável numérica. Para uma comparação booliana, result é a exclusão lógica (disjunção lógica exclusiva) de dois valores Boolean. Para operações bit a bit, result é um valor numérico que representa a exclusão bit a bit (disjunção bit a bit exclusiva) dos dois padrões de bits numéricos.

expression1
Obrigatórios. Qualquer Boolean ou expressão numérica.

expression2
Obrigatórios. Qualquer Boolean ou expressão numérica.

Comentários

Para comparação booleana, result é True se e somente se exatamente um de expression1 e expression2 for avaliado como True. Ou seja, se e somente se expression1 e expression2 forem avaliados para valores opostos de Boolean. A tabela a seguir ilustra como result é determinado.

Se expression1 for E expression2 for O valor de result é
True True False
True False True
False True True
False False False

Observação

Em uma comparação booliana, o operador Xor sempre avalia ambas as expressões, o que pode incluir a realização de chamadas de procedimento. Não há nenhum equivalente de curto-circuito para Xor, porque o resultado sempre depende de ambos os operandos. Para operadores lógicos de curto-circuito, confira Operador AndAlso e Operador OrElse.

Para operações bit a bit, o operador Xor executa uma comparação bit a bit dos bits posicionados de forma idêntica em duas expressões numéricas e define o bit correspondente em result de acordo com a tabela a seguir.

Se o bit em expression1 for E o bit em expression2 for O bit em result é
1 1 0
1 0 1
0 1 1
0 0 0

Observação

Como os operadores lógicos e bit a bit têm uma precedência menor do que outros operadores aritméticos e relacionais, todas as operações bit a bit devem ser colocadas entre parênteses para garantir execução precisa.

Por exemplo, 5 Xor 3 é 6. Para ver por que isso é assim, converta 5 e 3 nas respectivas representações binárias, 101 e 011. Em seguida, use a tabela anterior para determinar que 101 Xor 011 é 110, que é a representação binária do número decimal 6.

Tipos de dados

Se os operandos consistirem em uma expressão Boolean e uma expressão numérica, o Visual Basic converterá a expressão Boolean em um valor numérico (–1 para True e 0 para False) e executará uma operação bit a bit.

Para uma comparação Boolean, o tipo de dados do resultado será Boolean. Para uma comparação bit a bit, o tipo de dados de resultado será um tipo numérico apropriado para os tipos de dados de expression1 e expression2. Consulte a tabela "Comparações relacionais e bit a bit" nos Tipos de dados de resultados do operador.

Sobrecarga

O operador Xor pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou estrutura. Se o código usar esse operador em uma classe ou estrutura, certifique-se de entender o comportamento redefinido. Para obter mais informações, confira Procedimentos de operador.

Exemplo 1

O exemplo a seguir usa o operador Xor para executar a exclusão lógica (disjunção lógica exclusiva) em duas expressões. O resultado é um valor Boolean que representa se exatamente uma das expressões é True.

Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Xor b > c
secondCheck = b > a Xor b > c
thirdCheck = b > a Xor c > b

O exemplo anterior produz resultados de False, True e False, respectivamente.

Exemplo 2

O exemplo a seguir usa o operador Xor para executar a exclusão lógica (disjunção lógica exclusiva) nos bits individuais de duas expressões numéricas. O bit no padrão de resultado é definido se exatamente um dos bits correspondentes nos operandos for definido como 1.

Dim a As Integer = 10 ' 1010 in binary
Dim b As Integer = 8  ' 1000 in binary
Dim c As Integer = 6  ' 0110 in binary
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a Xor b)  '  2, 0010 in binary
secondPattern = (a Xor c) ' 12, 1100 in binary
thirdPattern = (b Xor c)  ' 14, 1110 in binary

O exemplo anterior produz resultados de 2, 12 e 14, respectivamente.

Confira também