Jaka jest różnica między operatorami logicznymi &
i &&
w programie MATLAB?
Odpowiedzi:
Pojedynczy ampersand & jest operatorem logicznym AND. Podwójny ampersand && jest ponownie operatorem logicznym AND, który wykorzystuje zachowanie zwarciowe. Zwarcie oznacza po prostu, że drugi argument (po prawej stronie) jest oceniany tylko wtedy, gdy wynik nie jest w pełni określony przez pierwszy argument (lewa strona)
A i B (oceniane są A i B)
A && B (B jest oceniane tylko wtedy, gdy A jest prawdziwe)
d != 0 && 1/d
vs d !=0 & 1/d
- pierwszy gwarantuje brak dzielenia przez zero, drugi nie.
&
robi zwarcie, jeśli w if
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 .
&
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.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..
A = [True True False True]
B = False
A & B = [False False False False]
..lub..
B = True
A & B = [True True False True]
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.
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
lub while
.
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((r<2)&(r<2))
”.
&
może działać na tablicach, ale&&
może działać tylko na skalarach.