Pregunta ¿Cuál es la diferencia entre & y && en MATLAB?


¿Cuál es la diferencia entre el & y && operadores lógicos en MATLAB?


74
2017-09-04 13:52


origen


Respuestas:


El signo único y es el operador AND lógico. El doble ampersand && es nuevamente un operador AND lógico que emplea un comportamiento de cortocircuito. El cortocircuito solo significa que el segundo operando (lado derecho) se evalúa solo cuando el resultado no está completamente determinado por el primer operando (lado izquierdo)

A y B (A y B son evaluados)

A && B (B solo se evalúa si A es verdadero)


86
2017-09-04 14:00



&& y || tomar entradas escalares y cortocircuitar siempre. | y & tomar entradas de matriz y cortocircuito solo en sentencias if / while. Para la asignación, este último no cortocircuita.

Ver estas páginas de doc para más información.


23
2017-09-08 12:02



Como ya lo mencionaron otros, & es un operador AND lógico y && es un operador Y de cortocircuito. Difieren en cómo se evalúan los operandos así como si operan o no en matrices o escalares:

  • & (Operador Y) y | (Operador OR) puede operar matrices en forma de elemento.
  • && y || son versiones de cortocircuito para las cuales 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 arreglos.

11
2017-09-04 14:07



Ambas son operaciones AND lógicas. El && though, es un operador de "cortocircuito". De los documentos de MATLAB:

Son operadores de cortocircuito en que evalúan su segundo operando solo cuando el resultado no está completamente determinado por el primer operando.

Ver más aquí.


8
2017-09-04 14:01



De forma similar a otros lenguajes, '&' es un operador lógico a nivel de bit, mientras que '&&' es una operación lógica.

Por ejemplo (disculpe mi sintaxis).

Si A = [True True False True]    B = Falso

A & B = [Falso Falso Falso Falso]

..o si B = True A & B = [True True False True]

Para '&&', el operando derecho solo se calcula si el operando de la izquierda es verdadero, y el resultado es un único valor booleano.

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

Espero que esté claro.


5
2017-09-04 14:03



&& y || son cortocircuito operadores que operan en escalares. & y | siempre evalúe ambos operandos y opere en arreglos.


3
2017-09-04 14:02



Una buena regla general al construir argumentos para usar en declaraciones condicionales (IF, WHILE, etc.) es siempre usa el && / || formas, a menos que haya una muy buena razón para no hacerlo. Hay dos razones ...

  1. Como otros han mencionado, el comportamiento de cortocircuito de && / || es similar a la mayoría de los lenguajes tipo C. Esa similitud / familiaridad generalmente se considera un punto a su favor.
  2. Usando el && o || formularios efectivo usted debe escribir el código completo para decidir su intención para los argumentos vectoriales. Cuando a = [1 0 0 1] y b = [0 1 0 1], ¿es a & b verdadero o falso? No recuerdo las reglas de MATLAB, ¿verdad? La mayoría de las personas no pueden. Por otro lado, si usa && o ||, se le FORCE escribir el código "en su totalidad" para resolver la condición.

Hacer esto, en lugar de confiar en 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 más fácil de mantener.


2
2017-08-16 05:21