В чем разница между логическими операторами &
и &&
в MATLAB?
Единственный амперсанд и является логическим оператором И. Двойной амперсанд & снова является логическим оператором И, который использует короткое замыкание. Короткое замыкание означает, что второй операнд (правая сторона) оценивается только тогда, когда результат не полностью определяется первым операндом (левая сторона)
A и B (A и B оцениваются)
A && B (B оценивается только в том случае, если A истинно)
&&
и ||
всегда принимают скалярные входы и короткое замыкание. |
и &
принимают входы массива и короткое замыкание только в операциях if/while. Для назначения последние не замыкаются.
Подробнее см. эти страницы doc.
&
и |
в заявлениях if / while? Похоже, это не относится к R2012b и R2014a.
Как уже упоминалось другими, &
является логическим оператором AND и &&
является оператор короткого замыкания AND. Они отличаются тем, как оцениваются операнды, а также независимо от того, работают ли они на массивах или скалярах:
&
(оператор AND) и |
(оператор OR) могут работать на массивах по-элементному.&&
и ||
- это версии с коротким замыканием, для которых второй операнд оценивается только тогда, когда результат не полностью определяется первым операндом. Они могут работать только на скалярах, а не на массивах.Оба являются логическими операциями И. && хотя, является оператором "короткого замыкания". Из документов MATLAB:
Они являются операторами короткого замыкания, поскольку они оценивают свой второй операнд только тогда, когда результат не полностью определяется первым операндом.
Подробнее здесь.
Как и другие языки, '&' является логическим побитовым оператором, тогда как '& &' является логической операцией.
Например (прошу простить мой синтаксис).
Если 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
- это побитовый логический оператор AND в MATLAB.
& & и || операторы короткого замыкания, работающие на скалярах. и | всегда оценивать оба операнда и работать с массивами.
Хорошее эмпирическое правило при построении аргументов для использования в условных операторах (IF, WHILE и т.д.) должно всегда использовать & &/|| формы, если нет веской причины не делать этого. Есть две причины...
Выполнение этого, вместо того, чтобы полагаться на разрешение MATLAB векторов в и и |, приводит к тому, что код немного более подробный, но LOT безопаснее и проще в обслуживании.
r((r<2)&(r<2))
».
&
может работать с массивами, но&&
может работать только со скалярами.