2012-02-02 9 views
7

Czy istnieje szybsza niż poniższa metoda odwrócenia wartości true lub false w przeciwnym kierunku?MATLAB: Odwracanie wartości logicznej szybko

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

Tak, być może tylko pięć linii kodu ma nic się martwić, ale coś, co wygląda bardziej jak byłoby to fantastyczne:

x = flip(x); 

Odpowiedz

16

Można wykonać następujące czynności:

x = ~x; 
+0

Wow. To nawet krócej, niż mogłem sobie wymarzyć. Powinienem wydostać się więcej. Dzięki – CaptainProg

+1

Jeśli chcesz uzyskać więcej, przejdź do internetowego dokumentu Matlab (uruchom 'doc()') i sprawdź MATLAB> Funkcje> Programowanie i typy danych> Operacje logiczne. Ma grupę takich operatorów. :) –

6

możesz użyć twierdzenia o negacji. nie mogę sobie przypomnieć, jak to działa w Matlab, ale myślę, że jest coś takiego jak

x = ~x; 
6

odpowiedź Franck jest lepsza (przy użyciu ~), ale chciałem podkreślić, że warunkowy twoje jest nieco zbędny. Łatwo jest zapomnieć, że ponieważ masz już wartość boolowską, nie musisz przeprowadzać porównania warunkowego. Więc mógłbyś to zrobić ...

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

Zauważ, że ten (i kod OP) jest poprawny tylko wtedy, gdy 'x' jest skalarem. Jeśli x jest nieokalibrowane, istnieje niejawne 'wszystko (x)' wokół niego, gdy jest używane w kontekście logicznym, tak jak jako argument dla 'if'. Na przykład, jeśli 'x' to' [1 1 1 0] ', będzie traktowane jako fałszywe i zastąpione przez' true'. Operator '~' jest elementowy, więc będzie działał z tablicami. (Z wyjątkiem pustych tablic, gdy jest używane z 'if', to jest oddzielna wielkość krawędzi). –

Powiązane problemy