Qual è la differenza tra gli operatori logici &
e &&
in MATLAB?
Risposte:
La singola e commerciale & è l'operatore logico AND. La doppia e commerciale && è ancora un operatore logico AND che impiega un comportamento di cortocircuito. Cortocircuito significa solo che il secondo operando (lato destro) viene valutato solo quando il risultato non è completamente determinato dal primo operando (lato sinistro)
A e B (vengono valutati A e B)
A && B (B viene valutato solo se A è vero)
d != 0 && 1/d
vs d !=0 & 1/d
- il primo non garantisce la divisione per zero, il secondo no.
&
fa cortocircuito se in una if
dichiarazione. E &&
accetta input scalari. La risposta di @ Loren di seguito è corretta.
&&
e ||
prendere sempre input scalari e cortocircuiti. |
e &
prendere input di array e cortocircuitare solo nelle istruzioni if / while. Per l'assegnazione, questi ultimi non vanno in cortocircuito.
Vedere queste pagine di documentazione per ulteriori informazioni.
&
e |
nelle istruzioni if / while? Non sembra essere il caso di R2012b e R2014a.
Come già accennato da altri, &
è un operatore logico AND ed &&
è un operatore AND di cortocircuito . Differiscono nel modo in cui gli operandi vengono valutati e se operano o meno su array o scalari:
&
(Operatore AND) e |
(Operatore OR) possono operare su array in modo saggio per gli elementi.&&
e ||
sono versioni in cortocircuito per le quali il secondo operando viene valutato solo quando il risultato non è completamente determinato dal primo operando. Questi possono funzionare solo su scalari , non su array.Simile ad altri linguaggi, &
è un operatore logico bit per bit, mentre &&
è un'operazione logica.
Ad esempio (scusate la mia sintassi).
Se..
A = [True True False True]
B = False
A & B = [False False False False]
..o..
B = True
A & B = [True True False True]
Per &&
, l'operando di destra viene calcolato solo se l'operando di sinistra è vero e il risultato è un singolo valore booleano.
x = (b ~= 0) && (a/b > 18.5)
Spero sia chiaro.
bitand
è l'operatore AND logico bit per bit in MATLAB.
&& e || sono operatori di cortocircuito che operano su scalari. & e | operare su array e utilizzare il cortocircuito solo nel contesto di espressioni if
o while
loop.
Una buona regola pratica quando si costruiscono argomenti da usare nelle istruzioni condizionali (IF, WHILE, ecc.) È usare sempre && / || forme, a meno che non ci sia una buona ragione per non farlo. Ci sono due ragioni ...
In questo modo, piuttosto che fare affidamento sulla risoluzione dei vettori di MATLAB in & e |, si ottiene un codice un po 'più dettagliato, ma MOLTO più sicuro e facile da mantenere.
r((r<2)&(r<2))
".
&
può operare su array ma&&
può operare solo su scalari.