В чем разница между & и && в MATLAB?


в чем разница между & и && логические операторы в MATLAB?

7 76

7 ответов:

одиночный амперсанд & - это логический оператор. Двойной амперсанд && снова является логическим и оператором, который использует поведение короткого замыкания. Короткое замыкание просто означает, что второй операнд (правая сторона) оценивается только тогда, когда результат не полностью определяется первым операндом (левая сторона)

A и B (A и B оцениваются)

A && B (B оценивается только в том случае, если a истинно)

&& и || всегда принимайте скалярные входы и короткое замыкание. | и & принимайте входы массива и короткое замыкание только в операторах if/while. Для назначения, последнее не делает короткое замыкание.

посмотреть эти страницы doc для получения дополнительной информации.

как уже упоминалось в других отзывах, & Это логический и оператор и && это короткое замыкание и оператор. Они отличаются тем, как вычисляются операнды а также независимо от того, работают ли они на массивах или скалярах:

  • & (оператор) и | (или оператор) может работать на массивы в элементной форме.
  • && и || версии короткого замыкания для которой второй операнд вычисляется только тогда, когда результат не полностью определяется первым операндом. Они могут работать только на скаляры, а не массивы.

оба логические и операции. & & , Хотя, является оператором "короткого замыкания". Из документов MATLAB:

Они являются операторами короткого замыкания в том, что они оценивают свой второй операнд только тогда, когда результат не полностью определяется первым операндом.

Посмотреть подробнее здесь.

Как и в других языках, ' & 'является логическим побитовым оператором, а' & & ' - логической операцией.

например (простите мой синтаксис).

Если A = [True True False True] B = False

A & B = [False False False False]

..или если B = True A & B = [True True False True]

для '& & ' правый операнд вычисляется только в том случае, если левый операнд имеет значение true, и результатом является одно логическое значение.

x = (b ~= 0) &&(a / b > 18.5)

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

&& и | / are короткое замыкание операторы, работающие на скалярах. & и / всегда оценивают оба операнда и работают с массивами.

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

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

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