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

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

    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)

    && 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.

    Consulte estas páginas de documentación para obtener más información.

    Como ya se mencionó por 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 en arreglos 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 en arreglos.

    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í .

    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 syntax).

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

    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.

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

    Una buena regla empírica al construir argumentos para usar en declaraciones condicionales (IF, WHILE, etc.) es usar siempre 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 || las formas te obligan a escribir el código completo para decidir tu 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.