Відповіді:
Поодинокий амперсанд & є логічним оператором І. Подвійний амперсанд && знову є логічним оператором І, що використовує поведінку короткого замикання. Коротке замикання просто означає, що другий операнд (справа) оцінюється лише тоді, коли результат не повністю визначений першим операндом (ліва сторона)
A & B (оцінюються A і B)
A&& B (B оцінюється, лише якщо A відповідає дійсності)
d != 0 && 1/d
vs d !=0 & 1/d
- перша гарантує відсутність ділення на нуль, друга - ні.
&
робить коротке замикання, якщо в if
заяві. І &&
приймає скалярні входи. @ Відповідь Лорен нижче є правильною.
&&
і завжди ||
приймайте скалярні входи та коротке замикання. |
і &
приймайте входи масиву та коротке замикання лише у операторах if / while. Для призначення останні не замикають.
Докладнішу інформацію див. На цих сторінках документів .
&
і |
в операторах if / while? Здається, це не так у R2012b та R2014a.
Як вже зазначалося іншими, &
є логічним оператором І і &&
є оператором І короткого замикання . Вони відрізняються тим, як оцінюються операнди, а також тим, чи працюють вони з масивами чи скалярами:
&
(І оператор), і |
(АБО оператор) можуть оперувати масивами елементарно.&&
і ||
являють собою варіанти короткого замикання, для яких другий операнд оцінюється лише тоді, коли результат не повністю визначений першим операндом. Вони можуть працювати лише на скалярах , а не на масивах.Подібно до інших мов, &
є логічним побітовим оператором, тоді як &&
є логічною операцією.
Наприклад (вибачте за мій синтаксис).
Якщо ..
A = [True True False True]
B = False
A & B = [False False False False]
..або ..
B = True
A & B = [True True False True]
Бо &&
правий операнд обчислюється лише в тому випадку, якщо лівий операнд є істинним, а результат - одне логічне значення.
x = (b ~= 0) && (a/b > 18.5)
Сподіваюся, це зрозуміло.
bitand
є побітовим логічним оператором І в MATLAB.
&& та || є операторами короткого замикання, що працюють на скалярах. & та | оперувати масивами та використовувати коротке замикання лише в контексті if
або while
циклічних виразів.
Хорошим емпіричним правилом при побудові аргументів для використання в умовних операторах (IF, WHILE тощо) є завжди використовувати && / || форми, якщо немає дуже вагомих причин, щоб цього не робити. Є дві причини ...
Це робить замість того, щоб покладатися на роздільну здатність MATLAB щодо векторів у & та |, призводить до коду, який є трохи більш багатослівним, але НАБАГАТО безпечнішим та простішим у обслуговуванні.
r((r<2)&(r<2))
".
&
може оперувати масивами, але&&
може оперувати лише скалярами.