2012-02-02 140 views
7

有沒有比以下更快的方式將真或假翻轉到相反的狀態?MATLAB:快速反轉布爾值

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

是的,也許只有5行代碼是什麼好擔心的,但一些看起來更像這將是美妙的:

x = flip(x); 

回答

16

你可以做到以下幾點:

x = ~x; 
+0

哇。這比我夢寐以求的時間還要短。我應該多出去。謝謝 – CaptainProg 2012-02-02 17:01:07

+1

如果您想了解更多信息,請訪問在線Matlab doco(運行'doc()')並查看MATLAB>函數>編程和數據類型>邏輯運算部分。它有一堆這樣的運營商。 :) – 2012-02-02 17:36:09

6

你可以使用否定語句。 我不記得它是如何工作在MATLAB中,但我認爲是一樣的東西

x = ~x; 
6

弗蘭克的回答是更好的(使用〜),但我只是想指出的是,在條件是略顯多餘。很容易忘記,因爲你已經有一個布爾值,你不需要在你的條件下進行比較。所以你可以這樣做...

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

請注意,如果'x'是標量,則此(和OP的代碼)纔是正確的。如果x是非標量的,當在布爾上下文中使用時,會有一個隱含的'all(x)',就像'if'的參數一樣。例如,如果'x'是'[1 1 1 0]',它將被視爲false,並替換爲'true'。 '〜'運算符是元素的,所以它可以處理數組。 (除了與'if'一起使用時的空數組;這是一個單獨的邊界情況。) – 2012-02-02 17:29:59