Какая разница между & и && в 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)

Надеюсь, что это ясно.

Ответ 7

Хорошее эмпирическое правило при построении аргументов для использования в условных операторах (IF, WHILE и т.д.) должно всегда использовать & &/|| формы, если нет веской причины не делать этого. Есть две причины...

  • Как уже упоминалось, короткозамкнутое поведение &/|| аналогичен большинству C-подобных языков. То, что сходство/знакомство обычно считается точкой в ​​его пользу.
  • Использование && или || формы заставляет вас написать полный код для определения вашего намерения для векторных аргументов. Когда a = [1 0 0 1] и b = [0 1 0 1], является истинным или ложным? Я не могу вспомнить правила для MATLAB &, вы можете? Большинство людей не могут. С другой стороны, если вы используете && или ||, вы FORCED, чтобы написать код "в полном объеме", чтобы разрешить условие.

Выполнение этого, вместо того, чтобы полагаться на разрешение MATLAB векторов в и и |, приводит к тому, что код немного более подробный, но LOT безопаснее и проще в обслуживании.