Відповіді:
Поодинокий амперсанд & є логічним оператором І. Подвійний амперсанд && знову є логічним оператором І, що використовує поведінку короткого замикання. Коротке замикання просто означає, що другий операнд (справа) оцінюється лише тоді, коли результат не повністю визначений першим операндом (ліва сторона)
A & B (оцінюються A і B)
A&& B (B оцінюється, лише якщо A відповідає дійсності)
d != 0 && 1/dvs 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))".
&може оперувати масивами, але&&може оперувати лише скалярами.