= x OR y
Esegue una esclusione logica su due espressioni, come esclusione bit a bit. Per
i confronti gestiti come risultato booleano (TRUE
o FALSE
), result è TRUE
se entrambe le espressioni sono valutate in modo diverso. La seguente
tabella mostra come viene determinato il risultato:
'TRUE XOR TRUE = FALSE
'
'TRUE XOR FALSE = TRUE
'
'FALSE XOR TRUE = TRUE
'
'FALSE XOR FALSE = FALSE
'
In generale, l'operatore XOR
esegue un confronto bit a bit dei bit di due espressioni
numeriche e imposta il bit corrispondente in result in base alla tabella precedente.
Nota che ugBASIC utilizza la convenzione, molto comune nei BASIC degli anni '70 e '80, di considerare la logica booleana come implementata tramite il cosiddetto “complemento a due”.
In altre parole, il valore FALSE
è associato a un numero composto da tutti 0
,
in termini di bit. Il valore TRUE
è, invece, associato a un numero composto da tutti 1
,
sempre in termini di bit.
Secondo la rappresentazione del complemento a 2, un numero composto da tutti 1 è sempre
equivalente al numero -1
, indipendentemente dal numero di bit di cui è composto, mentre
un numero composto da tutti 0 è sempre equivalente a zero.
Secondo questa convenzione, c'è una coincidenza tra operazioni bit a bit e logiche: infatti,
un XOR
bit a bit, applicato a tutti i bit del numero, sarà equivalente all'operazione
logica. Nota che l'operatore XOR
valuta sempre entrambe le espressioni, il che può
includere l'esecuzione di chiamate di routine.
Poiché gli operatori logici e bitwise hanno una precedenza inferiore rispetto ad altri operatori aritmetici e relazionali, tutte le operazioni bitwise devono essere racchiuse tra parentesi per garantire risultati accurati.
Se gli operandi sono costituiti da un'espressione SIGNED BYTE
e da un'espressione
numerica, converte l'espressione SIGNED BYTE
in un valore numerico (-1
per
TRUE
e 0 per FALSE
) ed esegue un'operazione bitwise. Quindi, il tipo di dati
del risultato è un tipo numerico appropriato per i tipi di dati di entrambe le espressioni.
IF x XOR x THEN: PRINT "never executed" : ELSE : PRINT "always executed": ENDIF
Xr
Se si riscontra un problema nell'utilizzare questo comando, se si ritiene che vi sia un bug oppure che la spiegazione sia poco chiara, è possibile aprire una segnalazione per questa parola chiave su GitHub. Grazie!