Jaka jest różnica między operatorami logicznymi &
i &&
w programie MATLAB?
matlab
logical-operators
short-circuiting
Fantomas
źródło
źródło
&
może działać na tablicach, ale&&
może działać tylko na skalarach.d != 0 && 1/d
vsd !=0 & 1/d
- pierwszy gwarantuje brak dzielenia przez zero, drugi nie.&
robi zwarcie, jeśli wif
instrukcji. I&&
pobiera dane skalarne. Odpowiedź @ Lorena poniżej jest poprawna.&&
i zawsze||
bierz skalarne dane wejściowe i zwarcie.|
i&
pobieraj dane wejściowe tablicowe i zwarcie tylko w instrukcjach if / while. Do przypisania te ostatnie nie powodują zwarcia.Więcej informacji można znaleźć na tych stronach z dokumentami .
źródło
&
i|
instrukcji if / while? Wydaje się, że nie ma to miejsca w R2012b i R2014a.Jak już wspomniano przez innych,
&
to operator logiczny AND i&&
jest zwarcie i operator . Różnią się sposobem oceny operandów, a także tym, czy działają na tablicach lub skalarach:&
(Operator AND) i|
(operator OR) mogą działać na tablicach w sposób elementarny.&&
i||
są wersjami zwarciowymi, dla których drugi argument jest oceniany tylko wtedy, gdy wynik nie jest w pełni określony przez pierwszy argument. Mogą one działać tylko na skalarach , a nie na tablicach.źródło
Obie są operacjami logicznymi AND. Jednak && jest operatorem „zwarcia”. Z dokumentacji MATLAB:
Zobacz więcej tutaj .
źródło
Podobnie jak w innych językach,
&
jest logicznym operatorem bitowym, podczas gdy&&
jest operacją logiczną.Na przykład (przepraszam za moją składnię).
Jeśli..
..lub..
Bo
&&
prawy operand jest obliczany tylko wtedy, gdy lewy operand ma wartość true, a wynikiem jest pojedyncza wartość logiczna.x = (b ~= 0) && (a/b > 18.5)
Mam nadzieję, że to jasne.
źródło
bitand
to bitowy operator logiczny AND w MATLAB.&& i || są operatorami zwarć operującymi na skalarach. & i | działają na tablicach i używają zwierania tylko w kontekście wyrażeń pętli
if
lubwhile
.źródło
Dobrą praktyczną zasadą podczas konstruowania argumentów do użycia w instrukcjach warunkowych (JEŻELI, GDY itd.) Jest zawsze używanie && / || formularze, chyba że istnieje bardzo dobry powód, aby tego nie robić. Są dwa powody ...
Robiąc to, zamiast polegać na rozdzielczości wektorów MATLAB w & i |, prowadzi do kodu, który jest nieco bardziej szczegółowy, ale DUŻO bezpieczniejszy i łatwiejszy w utrzymaniu.
źródło
r((r<2)&(r<2))
”.