Montag, Januar 27, 2020

MATLAB: Invertiert einen booleschen Wert schnell

Gibt es einen schnelleren Weg, als die folgenden zu ‚flip‘ ein true oder false an Ihren entgegengesetzten Zustand?

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

Ja, vielleicht auch nur fünf Zeilen code ist nichts zu befürchten, sondern etwas, das sieht eher aus wie das wäre fantastisch:

x = flip(x);
InformationsquelleAutor CaptainProg | 2012-02-02

3 Kommentare

  1. 17

    Können Sie das folgende tun:

    x = ~x;
    • Wow. Das ist sogar noch kürzer, als ich mir hätte erträumen können. Ich sollte mehr herausholen. Dank
    • Wenn Sie möchten, um aus mehr, den Kopf über die online-Matlab-doco (run doc()) und check-out der MATLAB – > Funktionen > Programmierung und Datentypen > Logische Operationen Abschnitt. Es hat eine Reihe von Operatoren wie diese. 🙂
  2. 6

    u verwenden können, negation-Anweisung.
    Ich kann mich nicht erinnern, wie es funktioniert in matlab, aber ich denke, dass ist so etwas wie

    x = ~x;
  3. 6

    Francks Antwort ist besser (mit ~), aber ich wollte nur darauf hinweisen, dass die bedingte yours ist etwas überflüssig. Es ist leicht zu vergessen, dass, da Sie bereits einen booleschen Wert, die Sie nicht brauchen, um ausführen eines Vergleichs in Ihrem bedingten. So hätte man nur getan…

    if x
      x = false;
    else
      x = true;
    end
    • Beachten Sie, dass diese (und der OP-code) ist nur korrekt, wenn x ist Skalar. Wenn x nicht skalaren, es gibt eine implizite all(x) um es beim Einsatz in einem booleschen Kontext, wie als argument für if. Zum Beispiel, wenn x ist [1 1 1 0], wird er als false behandelt, und ersetzt mit true. Die ~ – operator ist die elementweise, so dass es ‚ ll Arbeit mit arrays. (Außer leere arrays verwendet werden, wenn mit if; das ist eine separate edge-Fall.)

Kostenlose Online-Tests