Operador Xor (Visual Basic)
Executa uma exclusão lógica em duas Boolean
expressões ou uma exclusão bit a bit em duas expressões numéricas.
Sintaxe
result = expression1 Xor expression2
Partes
result
Obrigatório. Qualquer Boolean
variável ou variável numérica. Para comparação booleana, result
é a exclusão lógica (disjunção lógica exclusiva) de dois Boolean
valores. Para operações bitwise, result
é um valor numérico que representa a exclusão bitwise (disjunção bitwise exclusiva) de dois padrões de bits numéricos.
expression1
Obrigatório. Qualquer Boolean
expressão ou expressão numérica.
expression2
Obrigatório. Qualquer Boolean
expressão ou expressão numérica.
Observações
Para comparação booleana, result
é True
se e somente se exatamente um dos expression1
e expression2
avalia a True
. Ou seja, se e somente se expression1
e expression2
avaliar para valores opostos Boolean
. A tabela a seguir ilustra como result
é determinado.
Se expression1 for |
E expression2 é |
O valor de result é |
---|---|---|
True |
True |
False |
True |
False |
True |
False |
True |
True |
False |
False |
False |
Nota
Em uma comparação booleana, o operador sempre avalia ambas as expressões, o Xor
que pode incluir fazer chamadas de procedimento. Não há contrapartida de curto-circuito para Xor
, porque o resultado sempre depende de ambos os operandos. Para operadores lógicos de curto-circuito , consulte AndAlso Operator e OrElse Operator.
Para operações bitwise, o Xor
operador executa uma comparação bit a bit de bits posicionados de forma idêntica em duas expressões numéricas e define o bit correspondente de acordo com result
a tabela a seguir.
Se bit in expression1 é |
E pouco a pouco expression2 é |
O bit in result é |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
Nota
Uma vez que os operadores lógicos e bitwise têm uma precedência menor do que outros operadores aritméticos e relacionais, quaisquer operações bitwise devem ser colocadas entre parênteses para garantir uma execução precisa.
Por exemplo, 5 Xor
3 é 6. Para ver por que isso acontece, converta 5 e 3 para suas 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 Boolean
expressão e uma expressão numérica, o Visual Basic converte a Boolean
expressão em um valor numérico (–1 para True
e 0 para False
) e executa uma operação bitwise.
Para uma Boolean
comparação, o tipo de dados do resultado é Boolean
. Para uma comparação bit a bits, o tipo de dados de resultado é um tipo numérico apropriado para os tipos de dados de expression1
e expression2
. Consulte a tabela "Comparações relacionais e bitwise" em Tipos de dados de resultados do operador.
Sobrecarga
O Xor
operador pode estar sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento quando um operando tem o tipo dessa classe ou estrutura. Se seu código usa esse operador em tal classe ou estrutura, certifique-se de entender seu comportamento redefinido. Para obter mais informações, consulte Procedimentos do operador.
Exemplo 1
O exemplo a seguir usa o operador para executar exclusão Xor
lógica (disjunção lógica exclusiva) em duas expressões. O resultado é um Boolean
valor 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 para executar a Xor
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 estiver 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.