= x AND y
Esegue una congiunzione logica su due espressioni, come congiunzione bit a bit. Per
i confronti gestiti come risultato booleano (TRUE
o FALSE
), result è TRUE
se, e solo se, entrambe le espressioni vengono valutate come TRUE
. La seguente
tabella mostra come viene determinato il risultato:
'TRUE AND TRUE = TRUE
'
'TRUE AND FALSE = FALSE
'
'FALSE AND TRUE = FALSE
'
'FALSE AND FALSE = FALSE
'
In generale, l'operatore AND
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 AND
bit a bit, applicato a tutti i bit del numero, sarà equivalente all'operazione
logica. Nota che l'operatore AND
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 AND 1 THEN PRINT "x is odd" ELSE PRINT "x is even" ENDIF
An
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!