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

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

7 ответов

Решение

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

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

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

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

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

Как уже упоминалось другими, & является логическим оператором И и && является оператором короткого замыкания И Они отличаются по тому, как оцениваются операнды, а также от того, работают ли они с массивами или скалярами:

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

Оба являются логическими операциями. &&, тем не менее, является оператором "короткого замыкания". Из документов 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)

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

&& и || операторы короткого замыкания, работающие на скалярах. & и | работать с массивами и использовать короткое замыкание только в контексте if или же while выражения цикла.

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

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

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

Другие вопросы по тегам