2012-02-02 36 views
7

¿Hay una manera más rápida que la siguiente de "voltear" un verdadero o falso a su estado opuesto?MATLAB: Invertir un valor booleano rápidamente

if x == true 
x = false; 
else 
x = true; 
end 

Sí, tal vez sólo cinco líneas de código es nada de qué preocuparse, sino algo que se parece más a esto sería fantástico:

x = flip(x); 

Respuesta

16

Usted podría hacer lo siguiente:

x = ~x; 
+0

Wow. Eso es incluso más corto de lo que podría haber soñado. Debería salir más. Gracias – CaptainProg

+1

Si desea obtener más información, diríjase al Matlab doco en línea (ejecute 'doc()') y revise la sección MATLAB> Funciones> Programación y tipos de datos> Operaciones lógicas. Tiene un grupo de operadores como este. :) –

6

puede usar la declaración de negación. no puedo recordar cómo funciona en Matlab, pero creo que es algo así como

x = ~x; 
6

respuesta de Franck es mejor (usando ~), pero sólo quería señalar que el condicional en suyo es un poco redundante. Es fácil olvidar que, como ya tiene un valor booleano, no necesita realizar una comparación en su condicional. Entonces podría haber hecho esto ...

if x 
    x = false; 
else 
    x = true; 
end 
+1

Tenga en cuenta que esto (y el código de OP) solo es correcto si 'x' es escalar. Si x es no-escalar, hay un 'todo (x)' implícito a su alrededor cuando se usa en un contexto booleano, como el argumento para 'if'. Por ejemplo, si 'x' es' [1 1 1 0] ', se tratará como falso y se reemplazará por' true'. El operador '~' es elementwise, por lo que funcionará con matrices. (Excepto arreglos vacíos cuando se usa con 'if'; eso es un caso de borde separado.) –

Cuestiones relacionadas