В чем разница между логическими операторами &
и &&
в MATLAB?
Какая разница между & и && в MATLAB?
Ответ 1
Единственный амперсанд и является логическим оператором И. Двойной амперсанд & снова является логическим оператором И, который использует короткое замыкание. Короткое замыкание означает, что второй операнд (правая сторона) оценивается только тогда, когда результат не полностью определяется первым операндом (левая сторона)
A и B (A и B оцениваются)
A && B (B оценивается только в том случае, если A истинно)
Ответ 2
&&
и ||
всегда принимают скалярные входы и короткое замыкание. |
и &
принимают входы массива и короткое замыкание только в операциях if/while. Для назначения последние не замыкаются.
Подробнее см. эти страницы doc.
Ответ 3
Как уже упоминалось другими, &
является логическим оператором AND и &&
является оператор короткого замыкания AND. Они отличаются тем, как оцениваются операнды, а также независимо от того, работают ли они на массивах или скалярах:
-
&
(оператор AND) и|
(оператор OR) могут работать на массивах по-элементному. -
&&
и||
- это версии с коротким замыканием, для которых второй операнд оценивается только тогда, когда результат не полностью определяется первым операндом. Они могут работать только на скалярах, а не на массивах.
Ответ 4
Оба являются логическими операциями И. && хотя, является оператором "короткого замыкания". Из документов MATLAB:
Они являются операторами короткого замыкания, поскольку они оценивают свой второй операнд только тогда, когда результат не полностью определяется первым операндом.
Подробнее здесь.
Ответ 5
Как и другие языки, '&' является логическим побитовым оператором, тогда как '& &' является логической операцией.
Например (прошу простить мой синтаксис).
Если 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)
Надеюсь, что это ясно.
Ответ 6
& & и || операторы короткого замыкания, работающие на скалярах. и | всегда оценивать оба операнда и работать с массивами.
Ответ 7
Хорошее эмпирическое правило при построении аргументов для использования в условных операторах (IF, WHILE и т.д.) должно всегда использовать & &/|| формы, если нет веской причины не делать этого. Есть две причины...
- Как уже упоминалось, короткозамкнутое поведение &/|| аналогичен большинству C-подобных языков. То, что сходство/знакомство обычно считается точкой в его пользу.
- Использование && или || формы заставляет вас написать полный код для определения вашего намерения для векторных аргументов. Когда a = [1 0 0 1] и b = [0 1 0 1], является истинным или ложным? Я не могу вспомнить правила для MATLAB &, вы можете? Большинство людей не могут. С другой стороны, если вы используете && или ||, вы FORCED, чтобы написать код "в полном объеме", чтобы разрешить условие.
Выполнение этого, вместо того, чтобы полагаться на разрешение MATLAB векторов в и и |, приводит к тому, что код немного более подробный, но LOT безопаснее и проще в обслуживании.