Qual è la differenza tra gli operatori logici |
e ||
in MATLAB?Qual è la differenza tra | e || in MATLAB?
risposta
||
viene utilizzato per ingressi scalari
|
prende array input se/while
Dalla source: -
utilizzano sempre la & & e || operatori quando è richiesto un cortocircuito. Utilizzando gli operatori elementwise (& e |) per il cortocircuito, produce risultati imprevisti.
Questo non è del tutto preciso. –
operatori logici
MATLAB offre tre tipi di logica operators
e functions
:
|
è Element-wise - operano su elementi di matrici logiche corrispondenti.
Esempio: ingressi vettoreA
eB
A = [0 1 1 0 1]; B = [1 1 0 0 1];
A | B = 11101
||
è cortocircuito - operare sui scalare, espressioni logicheEsempio:
||
: Restituisce logico 1 (vero) se uno di ingresso, o di entrambi, restituiscono true, e logico 0 (falso) se non lo fanno.Operando: espressioni logiche contenenti valori scalari.
A
||B
(B viene valutata solo se A è falso)A = 1;
B = 0;
C =(A || (B = 1));
B
è0
dopo questa espressione eC is 1
.Altro, bit-saggio: operare sui bit corrispondenti di valori o array interi.
reference link
|
rappresenta OR
come logical operator. è anche un operatore logico chiamato short-circuit OR
Il vantaggio più importante degli operatori di cortocircuito è che è possibile utilizzarli per valutare un'espressione solo quando sono soddisfatte determinate condizioni. Ad esempio, si desidera eseguire una funzione solo se il file di funzione risiede sul percorso MATLAB corrente. Corto circuito mantiene il seguente codice da generare un errore quando il file, myfun.m, non può essere trovato:
comp = (exist('myfun.m') == 2) && (myfun(x) >= y)
Allo stesso modo, questa affermazione evita il tentativo di dividere per zero:
x = (b ~= 0) && (a/b > 18.5)
Puoi anche utilizzare gli operatori &&
e ||
in if
e while
dichiarazioni di sfruttare loro comportamento cortocircuito:
if (nargin >= 3) && (ischar(varargin{3}))
Ripete le informazioni indicate nella domanda. –
Sono su una rete maledetta su cellulare e non ho nemmeno visto che c'è un'altra risposta. Qualcuno può per favore formattare il codice nel mio post. – bonCodigo
Fantastico, credo di doverlo fare da solo. Ecco un altro post che potresti voler guardare. Formatterò il post quando avrò davanti una macchina. http://stackoverflow.com/questions/1379415/whats-the-difference-between-and-in-matlab – bonCodigo
Sono sicuro di aver letto la documentazione per short-circuiting operators e per element-wise operators.
Una differenza importante è che gli operatori a livello di elemento possono operare sugli array mentre gli operatori di cortocircuito si applicano solo agli operandi logici scalari.
Ma probabilmente la differenza principale è il problema del cortocircuito. Per gli operatori di cortocircuito, l'espressione viene valutata da sinistra a destra e non appena il risultato finale può essere determinato con certezza, i termini rimanenti non vengono valutati.
Ad esempio, si consideri
x = a && b
Se a
viene valutato come false
, allora sappiamo che a && b
viene valutato come false
indipendentemente da ciò che viene valutato come b
. Quindi non c'è bisogno di valutare b
.
Ora consideriamo questa espressione:
NeedToMakeExpensiveFunctionCall && ExpensiveFunctionCall
dove immaginiamo che ExpensiveFunctionCall
richiede molto tempo per valutare. Se possiamo eseguire un altro test a basso costo che ci consenta di saltare la chiamata a ExpensiveFunctionCall
, possiamo evitare di chiamare ExpensiveFunctionCall.
Supponiamo quindi che NeedToMakeExpensiveFunctionCall
valuti su false
. In tal caso, poiché abbiamo utilizzato gli operatori di cortocircuito, non verrà chiamato ExpensiveFunctionCall
.
Al contrario, se abbiamo usato l'operatore elemento-saggio e scritto la funzione come questa:
NeedToMakeExpensiveFunctionCall & ExpensiveFunctionCall
poi la chiamata a ExpensiveFunctionCall
non sarebbe mai saltato.
Infatti la MATLAB documentation, che spero di aver letto, include un ottimo esempio che illustra il punto molto bene:
x = (b ~= 0) && (a/b > 18.5)
In questo caso non possiamo effettuare a/b
se b
è zero.Da qui il test per b ~= 0
. L'uso dell'operatore di cortocircuito significa che evitiamo di calcolare a/b
quando b
è zero e quindi evitare l'errore di runtime che si verificherebbe. Chiaramente l'operatore logico element-element non sarebbe in grado di evitare l'errore di run-time.
Per una discussione più approfondita sulla valutazione del cortocircuito, fare riferimento a Wikipedia article sul soggetto.
+1: Potrebbe essere degno di nota menzionare che '|' può operare anche sugli array, mentre '||' solo su scalari. Inoltre, [Loren Shure] (http://blogs.mathworks.com/loren/) indica [qui] (http://stackoverflow.com/a/1393606/1336150) che '|' può anche cortocircuitare (!!), ma solo nelle istruzioni 'if' /' while'. –
Cortocircuito ||
significa che i parametri verranno valutati solo se necessariamente nell'espressione. Nel nostro esempio expr1 || expr2
se valuta TRUE
, non è necessario valutare il secondo operando - il risultato sarà sempre TRUE
. Se hai una lunga catena di operatori di cortocircuito A || B || C || D
e la tua prima valutazione è vera, gli altri non verranno valutati.
Se si sostituisce Element-wise logico |
a A | B | C | D
, tutti gli elementi verranno valutati indipendentemente dagli operandi precedenti.
- 1. Qual è la differenza tra & e && in MATLAB?
- 2. Qual è la differenza tra * e. * In MATLAB?
- 3. Qual è la differenza tra = e: =
- 4. Qual è la differenza tra `##` e `hashCode`?
- 5. Qual è la differenza tra dict() e {}?
- 6. qual è la differenza tra:.! e: r !?
- 7. Qual è la differenza tra Verilog! e ~?
- 8. Qual è la differenza tra ("") e (null)
- 9. Qual è la differenza tra? : e ||
- 10. qual è la differenza tra [[], []] e [[]] * 2
- 11. Qual è la differenza tra $ e $$?
- 12. Qual è la differenza tra " " e ""?
- 13. Qual è la differenza tra {0} e ""?
- 14. Qual è la differenza tra {0} e +?
- 15. Qual è la differenza tra .ToString() e + ""
- 16. Differenza tra filtro e conv in MATLAB
- 17. Qual è la differenza tra stateflow e simulink?
- 18. Qual è la differenza tra i file .m e .mat in MATLAB
- 19. Qual è la differenza tra "in fp" e "in fp.readlines()"?
- 20. Qual è la differenza tra Metodi e Attributi in Ruby?
- 21. qual è la differenza tra @ id/e @ + id/in android?
- 22. Qual è la differenza tra 'e "in? JavaScript
- 23. Qual è la differenza tra booleano e booleano in Java?
- 24. Qual è la differenza tra target e currenttarget in flex?
- 25. In .NET, qual è la differenza tra AsFoo() e ToFoo()?
- 26. Qual è la differenza tra reindirizzamento e inoltro in Symfony?
- 27. Qual è la differenza tra identità e uguaglianza in OOP?
- 28. Qual è la differenza tra .replace e -replace in powershell?
- 29. Qual è la differenza tra% e %% in un file cmd?
- 30. Qual è la differenza tra `@ Bind` e` @ BindView` in butterknife?
Dai un'occhiata alla documentazione: http://www.mathworks.co.uk/help/matlab/matlab_prog/operators.html#f0-38948. –
domanda correlata: [Qual è la differenza tra & e && in MATLAB?] (Http://stackoverflow.com/questions/1379415/whats-the-difference-between-and-in-matlab) –