Die Logische Verknüpfung:



  • @Wade1234 Hast Du schon einmal

    char *foo = whatever;
    if (foo) ...
    

    geschrieben?



  • @Swordfish also ich weiß natürlich, dass das geht, aber ich finde das nicht schön. also

    char *foo = whatever;
    if(foo != NULL) //oder if(foo != nullptr)
    

    finde ich irgendwie besser. aber eigentlich ist das ein wertevergleich und keine logische äquivalenz.



  • @Wade1234 sagte in Die Logische Verknüpfung::

    aber wenn "int WerteMeineAussageAus()" plötzlich 12345 zurückliefert, obwohl der wertebereich ja nur {0, 1} ist, stimmt da doch schon etwas grundsätzliches nicht, oder?

    Die Definition von "true" ist im aktuellen C-Draft an vielen Stellen (zurecht) immer noch "nonzero". Auch zB für die character classification functions in <ctype.h>. Sind die dann jetzt kaput?



  • @Wade1234
    Wenn != logisches XOR ist, dann ist auch ^ logisches XOR, und & ist logisches UND.
    Ist aber nicht so 🙂



  • Man könnte diesbetreffend auch über Sequence Points und Auswertungsreihenfolge philosophieren ^^



  • @Swordfish sagte in Die Logische Verknüpfung::

    @Wade1234 sagte in Die Logische Verknüpfung::

    aber wenn "int WerteMeineAussageAus()" plötzlich 12345 zurückliefert, obwohl der wertebereich ja nur {0, 1} ist, stimmt da doch schon etwas grundsätzliches nicht, oder?

    Die Definition von "true" ist im aktuellen C-Draft an vielen Stellen (zurecht) immer noch "nonzero". Auch zB für die character classification functions in <ctype.h>. Sind die dann jetzt kaput?

    nein das nicht, aber man sollte für logische verknüpfungen einfach bei 0 und 1 bleiben.

    @hustbaer

    != | B | A | Q
    -------------------
       | 0 | 0 | 0
       | 0 | 1 | 1
       | 1 | 0 | 1
       | 1 | 1 | 0
    

    passt doch.



  • @Wade1234 sagte in Die Logische Verknüpfung::

    nein das nicht, aber man sollte für logische verknüpfungen einfach bei 0 und 1 bleiben.

    Deswegen die schönen Rufzeichen 😉

    @Wade1234 sagte in Die Logische Verknüpfung::

    passt doch.

    Ja. Aber wie gesagt nur wenn Du vorher sicherstellst daß die Operanden nur Bool'sche Werte haben.



  • @Wade1234 Die in C++ als logische Operatoren bezeichneten Operatoren konvertieren alle ihre Inputs erstmal nach bool. != macht das nicht. Daher passt != nicht in die Liste.

    Klar, wenn es schon bools sind, dann kann man != verwenden. Nur dann kann man halt auch genau so gut ^ verwenden.

    Und wenn ich die Wahl zwischen den beiden habe, dann wähle ich einfach den der für mich "passender klingt". Und wenn ich jmd. etwas mit dem Begriff "xor" erklären würde, dann nehme ich ^ und wenn ich es mit dem Begriff "ungleich" erklären würde dann nehme ich !=.

    Und aus diesen Gründen macht es für mich keinen Sinn != als logischen XOR Operator zu bezeichnen.



  • @ziad38 sagte in Die Logische Verknüpfung::

    Es geht um c sprache. ich meine diese Umkehrung für A XOR B , habe nicht verstannden, aber ich weiss was XOR bedeutet, es geht nur um die Umkeherung: leider kann ich kein Bild schicke , sonst mache ich ein Bild vom Text vom meinem Buch und versteht ihr beser was ich meine.

    A XOR B = C⇔(C XOR A = ) ∧ (C XOR B = A)??



  • lies es dir doch einfach aus der tabelle ab: A = (Q ^ -B) v (-Q ^ B ) = Q xor B und B = (Q ^ -A) v (-Q ^ A) = Q xor A.

    deshalb funktioniert das ja auch mit der xor-verschlüsselung.


Log in to reply