Boolesche Logik
Ein Drittes gibt es nicht.
– Aristoteles
Wahrheitswerte
Die Antwort auf eine Entscheidungsfrage kann nur nein oder ja lauten. Auch Vergleiche sind Entscheidungsfragen: Ist fünf weniger als drei? Die Aussage 5<3 ist falsch, 3<5hingegen wahr. Die Wahrheitswerte mit den englischen Bezeichnungen false und true haben in C++ den Typ bool.1
Logische Verknüpfungen
Logische Operationen wie die Konjunktion a and b und die Disjunktion a or b verknüpfen Wahrheitswerte von Aussagen aund b. Die Negation not a einer wahren Aussage a ist falsch und umgekehrt. „Entweder a oder b“ (exklusives Oder, xor, Antivalenz) kann für boolesche Werte durch die Ungleichheit a != b , die Äquivalenz durch a == b dargestellt werden. Für die Implikation („Wenn a, dann b“) gibt es in C++ keinen Namen oder Operationszeichen. Sie ist gleichwertig zu b or not a.
| a | b | a and b | a or b | not a | a!=b | a==b | a=>b |
|---|---|---|---|---|---|---|---|
| false | false | false | false | true | false | true | true |
| false | true | false | true | true | true | false | true |
| true | false | false | true | false | true | false | false |
| true | true | true* | true | false | false | true | true |
Das folgende Programm erstellt die obige Tabelle für die logischen Operationen im Markdown-Format. Es belegt zwei lokal innerhalb der Anweisungen for(...)definierte boolesche Variablen nacheinander jeweils mit den Werten falseund true:
//> basics/truthtable.cpp
import std;
int main()
{
std::println(
"|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|",
"a", "b", "a and b", "a or b", "not a", "a!=b", "a==b", "a=>b"
);
std::println("{0}{0}{0}{0}{0}{0}{0}{0}|", "|--------");
for (bool a : {false, true})
{
for (bool b : {false, true})
{
std::println(
"|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|{:^8}|",
a, b, a and b, a or b, not a, a != b, a == b, b or not a
);
}
}
}Aufgaben
- Was bewirken die Angaben innerhalb der
println()-Anweisungen?- Ersetze die Wörter
and,orundnotdurch deren aus der Programmiersprache C geerbte Entsprechungen als Operationszeichen&&,||und!. Die Wort-Schreibweisen wurden 1995 aus C++ nach C reimportiert. Dennoch werden die Operationszeichen traditionell in fast jedem Quelltext eingesetzt. Erwäge Vorteile und Nachteile beider Schreibweisen.- Bestimme den Wahrheitswert von
b or not bfür einen beliebigen logischen Ausdruckb.
Anmerkungen
-
George Boole erkannte, dass die Gesetze der Logik mit nur zwei Werten wahr und falsch beschrieben werden können. Die Rechenregeln der zweiwertigen Logik werden ihm zu Ehren als boolesche Algebra bezeichnet. https://de.wikipedia.org/wiki/George_Boole ↩