2012-02-02 24 views
7

C'è un modo più veloce del seguente per "capovolgere" uno stato vero o falso al suo stato opposto?MATLAB: invertire rapidamente un valore booleano

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

Sì, forse solo cinque righe di codice è nulla di cui preoccuparsi, ma qualcosa che assomiglia di più a questo sarebbe fantastico:

x = flip(x); 

risposta

16

Si potrebbe fare la seguente:

x = ~x; 
+0

Wow. È ancora più breve di quanto avrei potuto immaginare. Dovrei uscire di più. Grazie – CaptainProg

+1

Se vuoi saperne di più, vai al documento online Matlab doco (esegui 'doc()') e consulta la sezione MATLAB> Funzioni> Programmazione e tipi di dati> Operazioni logiche. Ha un sacco di operatori come questo. :) –

6

u puoi usare la dichiarazione di negazione. non mi ricordo come funziona in MATLAB, ma penso che sia qualcosa di simile

x = ~x; 
6

risposta di Franck è meglio (con ~), ma volevo solo far notare che il condizionale in vostro è leggermente ridondante. È facile dimenticare che, poiché hai già un valore booleano, non è necessario eseguire un confronto nel tuo condizionale. Quindi avresti potuto farlo ...

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

Si noti che questo (e il codice OP) è corretto solo se 'x' è scalare. Se x non è scalare, c'è un implicito 'tutto (x)' attorno ad esso quando usato in un contesto booleano, come l'argomento di 'if'. Ad esempio, se 'x' è' [1 1 1 0] ', verrà trattato come falso e sostituito con' true'. L'operatore '~' è elementwise, quindi funzionerà con gli array. (Tranne gli array vuoti se usato con 'if', questo è un caso limite separato.) –

Problemi correlati