В чем разница между & и && в 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 и т. Д.) - всегда использовать &&/|| формы, если только нет очень веской причины не делать этого. Есть две причины...
- Как уже упоминалось, короткое замыкание в &&/|| похож на большинство C-подобных языков. Это сходство / фамильярность обычно считается точкой в его пользу.
- Используя && или || формы заставляют вас написать полный код для определения вашего намерения для векторных аргументов. Когда a = [1 0 0 1] и b = [0 1 0 1], является ли a&b истинным или ложным? Я не могу вспомнить правила для MATLAB &, не так ли? Большинство людей не могут. С другой стороны, если вы используете && или ||, вы вынуждены написать код "полностью" для разрешения условия.
Делая это, вместо того, чтобы полагаться на разрешение векторов в MATLAB в & и |, мы получаем более подробный код, но ОЧЕНЬ более безопасный и простой в обслуживании.