Operatore Xor (Visual Basic)
Esegue un'esclusione logica di due espressioni Boolean
oppure un'esclusione bit per bit di due espressioni numeriche.
Sintassi
result = expression1 Xor expression2
Parti
result
Obbligatorio. Qualsiasi Boolean
o variabile numerica. Per il confronto booleano, result
è l'esclusione logica (disgiunzione logica esclusiva) di due valori Boolean
. Per le operazioni bit per bit, result
è un valore numerico che rappresenta l'esclusione bit per bit (disgiunzione bit per bit esclusiva) di due modelli di bit numerici.
expression1
Obbligatorio. Qualsiasi Boolean
o espressione numerica.
expression2
Obbligatorio. Qualsiasi Boolean
o espressione numerica.
Osservazioni:
Per il confronto booleano, result
è True
se e solo se uno tra expression1
e expression2
restituisce esattamente True
. Ovvero, se e solo se expression1
e expression2
restituiscono valori Boolean
opposti. Nella tabella seguente viene illustrato come result
viene determinato.
Se expression1 è |
E expression2 è |
Il valore di result è |
---|---|---|
True |
True |
False |
True |
False |
True |
False |
True |
True |
False |
False |
False |
Nota
In un confronto booleano, l'operatore Xor
valuta sempre entrambe le espressioni, che possono includere l'esecuzione di chiamate di routine. Non esiste alcuna controparte a corto circuito di Xor
, perché il risultato dipende sempre da entrambi gli operandi. Per gli operatori logici a corto circuito, vedere Operatore AndAlso e Operatore OrElse.
Per le operazioni bit per bit, l'operatore Xor
esegue un confronto bit per bit dei bit di due espressioni numeriche e imposta il bit corrispondente in result
in base alla tabella seguente.
Se il bit in expression1 è |
E il bi in expression2 è |
Il bit in result è |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
Nota
Poiché gli operatori logici e bit per bit hanno una precedenza inferiore rispetto ad altri operatori aritmetici e relazionali, tutte le operazioni bit per bit devono essere racchiuse tra parentesi per garantire un'esecuzione accurata.
Ad esempio, 5 Xor
3 è 6. Per capirne il motivo, convertire 5 e 3 nelle rispettive rappresentazioni binarie, 101 e 011. Usare quindi la tabella precedente per determinare che 101 Xor 011 è 110, ovvero la rappresentazione binaria del numero decimale 6.
Tipi di dati
Se gli operandi sono costituiti da un'espressione Boolean
e da un'espressione numerica, Visual Basic converte l'espressione Boolean
in un valore numerico (-1 per True
e 0 per False
) ed esegue un'operazione bit per bit.
Per un confronto Boolean
, il tipo di dati del risultato è Boolean
. Per un confronto bit per bit, il tipo di dati del risultato è un tipo numerico appropriato per i tipi di dati di expression1
e expression2
. Vedere la tabella "Confronti relazionali e bit per bit" nei Tipi di dati dei risultati dell'operatore.
Overload
L'operatore Xor
può essere sottoposto a overload, il che significa che una classe o una struttura può ridefinirne il comportamento quando un operando ha il tipo di tale classe o struttura. Se il codice usa questo operatore in una classe o una struttura di questo tipo, assicurarsi di comprenderne il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Esempio 1
Nell'esempio seguente viene usato l'operatore Xor
per eseguire l'esclusione logica (disgiunzione logica esclusiva) in due espressioni. Il risultato è un valore Boolean
che indica se una delle espressioni è esattamente 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
L'esempio precedente produce rispettivamente i risultati di False
, True
e False
.
Esempio 2
Nell'esempio seguente viene usato l'operatore Xor
per eseguire l'esclusione logica (disgiunzione logica inclusiva) sui singoli bit di due espressioni numeriche. Il bit nel criterio di risultato viene impostato se esattamente uno dei bit corrispondenti negli operandi è impostato su 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
L'esempio precedente produce rispettivamente i risultati 2, 12 e 14.