¿Cuál es la diferencia entre los operadores lógicos &
y &&
en MATLAB?
matlab
logical-operators
short-circuiting
Fantomas
fuente
fuente
&
puede operar en matrices pero&&
solo puede operar en escalares.d != 0 && 1/d
vsd !=0 & 1/d
- el primero no garantiza la división por cero, el segundo no.&
hace cortocircuito si en unaif
declaración. Y&&
toma entradas escalares. La respuesta de @ Loren a continuación es correcta.&&
y||
tomar entradas escalares y cortocircuito siempre.|
y&
tomar entradas de matriz y cortocircuito solo en declaraciones if / while. Para la asignación, estos últimos no cortocircuitan.Consulte estas páginas de documentos para obtener más información.
fuente
&
y|
en declaraciones if / while? No parece ser el caso en R2012b y R2014a.Como ya han mencionado otros,
&
es un operador AND lógico y&&
es un operador AND de cortocircuito . Se diferencian en cómo se evalúan los operandos y en si operan o no en matrices o escalares:&
(Operador Y) y|
(Operador O) pueden operar en matrices de una manera por elementos.&&
y||
son versiones de cortocircuito para las que el segundo operando se evalúa solo cuando el resultado no está completamente determinado por el primer operando. Estos solo pueden operar en escalares , no en matrices.fuente
Ambos son operaciones AND lógicas. Sin embargo, && es un operador de "cortocircuito". De los documentos de MATLAB:
Vea más aquí .
fuente
Similar a otros lenguajes,
&
es un operador lógico bit a bit, mientras que&&
es una operación lógica.Por ejemplo (perdón por mi sintaxis).
Si..
..o..
Para
&&
, el operando derecho solo se calcula si el operando izquierdo es verdadero y el resultado es un único valor booleano.x = (b ~= 0) && (a/b > 18.5)
Espero que esté claro.
fuente
bitand
es el operador AND lógico bit a bit en MATLAB.&& y || son cortocircuitos operadores de que operan sobre escalares. & y | operan en matrices y usan cortocircuitos solo en el contexto de expresiones de bucle
if
owhile
.fuente
Una buena regla general al construir argumentos para usar en declaraciones condicionales (SI, MIENTRAS, etc.) es usar siempre && / || formularios, a menos que haya una muy buena razón para no hacerlo. Hay dos razones ...
Hacer esto, en lugar de depender de la resolución de vectores de MATLAB en & y |, conduce a un código que es un poco más detallado, pero MUCHO más seguro y fácil de mantener.
fuente
r((r<2)&(r<2))
".