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

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

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 в & и|, приводит к коду, который немного более подробный, но намного безопаснее и проще поддерживать.