Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Aus-drücke, arithmetische Operatoren.

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

Einführung in die Programmiersprache C/C++
Ein- und Ausgabe von Dateien
Funktionen, Felder und Parameter-übergabe
Gliederung des Inhalts
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
WHILE - Anweisung.
FOR Anweisung.
DO...WHILE Anweisung.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher bekannt: Einfache Variable Feld Vereinbarung Zuweisung Block while-Schleife Bedingte Anweisung (if) Typ.
Ein Vortrag von Stefan Winter & Marc Ruppert
Abstrakter Datentyp in C++ I - Klasse -
Das erste Programm (Folie 16)
Einführung in C++ und das objektorientierte Programmieren (OOP)
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Einführung in die Programmierung
Informatik I for D-MAVT
Informatik 1 Übung 2.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
© Roland Angst, 2010Institute of Visual Computing Informatik I for D-MAVT Exercise Session 1.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Dynamische Datentypen
Lindenmayer-Systeme: Fraktale rekursiv zeichnen
Felder (Arrays) und Zeiger (Pointers) - Teil II Zeichen, Texte, String Matching; Mehrdimensionale Felder; kürzeste Wege.
Referenztypen (II) und Const- Referenzen Temporäre Objekte, Const- Referenzen, was genau ist konstant?
Auswahlanweisungen, Iterationsanweisungen, Blöcke, Sprunganweisungen
Einführung Die Mersenne’sche Vermutung, Editor, Compiler, Computer, Betriebssystem, Plattform, Das erste C++-Programm.
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Grundlagen wissenschaftlichen Arbeitens An Overview of C++ Ali CICEK
DAS C ++ PROGRAMM Emine Birol. Erste Version: C with classes In 1985, in 1990 und in 1994 hatte C++ Versionen, die weiterzuentwickeln. Der Standart ist.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
BMEVIEEA100 Grundlagen der Programmierung
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
Vorlesung 5. #include double fv(double x) { return sin(x); } int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i
Vorkurs Programmierungstechnik Einführung in Pascal Michael Gellner Lehrstuhl für Softwaretechnik am Institut für praktische Informatik der Universität.
Gruppenarbeit „APIs“ Wetterservice. Wetterservice aktuell Input Parameter: – Ort – Aktuelles Datum Output Parameter: – Wetterzustand – Temperatur in Grad.
Repetitorium PG : Standard Template Library FH-Darmstadt, FB Informatik.
early binding (frühe Bindung) late binding (späte Bindung)
Übersicht Nachtrag zu Ausdrücken
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
CONTOH-CONTOH SOAL BESERTA PROGRAMNYA. Buat Pyramid Angka 2 baris, seperti gambar di bawah: #include int main() { clrscr(); int x, y, z, bil=5; for( x.
1 // 6_1_KKarte als Struct // // demonstriert structs // Bei Behandlung von "Randfällen" nicht robust. // Fehlerhaft !? #include const char ZeilenEnde.
1 // Verkettete Liste 3 // demonstriert verkettete Listen und // Rekursion // (mit Entfernen eines Listenelementes) // #include struct Liste { int Element;
Deutsche Rezepte (usw.). abschütten backen to bake darunter mischen to mix into einschießen to place something in an oven to bake unterheben fold into,
Das Wetter in Deutschland Die Temperaturen. Celsius oder Fahrenheit °F to°C  Deduct 32, then multiply by 5, then divide by 9 50°F = 86°F = °C to°F 
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Einführung. Ziel der Veranstaltung  Vermittlung von Grundkenntnissen in C++  Solide Basis für anschließende Weiterentwicklung  Fähigkeit, kleine Programme.
IOStreamLibrary.
CPP Eine der frühen objektorientierten Programmiersprachen
IOStreamLibrary.
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
Klicke auf eine Zahl..
 Präsentation transkript:

Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Aus-drücke, arithmetische Operatoren

Celsius to Fahrenheit // Program: fahrenheit.cpp // Convert temperatures from Celsius to Fahrenheit. #include <iostream> int main() { // Input std::cout << "Temperature in degrees Celsius =? "; int celsius; std::cin >> celsius; // Computation and output std::cout << celsius << " degrees Celsius are " << 9 * celsius / 5 + 32 << " degrees Fahrenheit.\n"; return 0; }

Celsius to Fahrenheit 15 degrees Celsius are 59 degrees Fahrenheit. // Program: fahrenheit.cpp // Convert temperatures from Celsius to Fahrenheit. #include <iostream> int main() { // Input std::cout << "Temperature in degrees Celsius =? "; int celsius; std::cin >> celsius; // Computation and output std::cout << celsius << " degrees Celsius are " << 9 * celsius / 5 + 32 << " degrees Fahrenheit.\n"; return 0; } 15 degrees Celsius are 59 degrees Fahrenheit.

9 * celsius / 5 + 32 arithmetischer Ausdruck enthält drei Literale, eine Variable, drei Operatorsymbole

Wie ist der Ausdruck geklammert? 9 * celsius / 5 + 32 arithmetischer Ausdruck enthält drei Literale, eine Variable, drei Operatorsymbole Wie ist der Ausdruck geklammert?

Assoziativität und Präzedenz 9 * celsius / 5 + 32 bedeutet (9 * celsius / 5) + 32 Regel 1: Punkt- vor Strichrechnung

Assoziativität und Präzedenz (9 * celsius / 5) + 32 bedeutet ((9 * celsius) / 5) + 32 Regel 2: Von links nach rechts

Assoziativität und Präzedenz Regel 1: Multiplikative Operatoren (*, /, %) haben höhere Präzedenz (“binden stärker”) als additive Operatoren (+, -) Regel 2: Arithmetische Operatoren (*, /, %, +, -) sind linksassoziativ (bei gleicher Präzedenz erfolgt Auswertung von links nach rechts

Assoziativität und Präzedenz -3 - 4 bedeutet (-3) - 4 Regel 3: Unäre +,- vor binären +,-

Assoziativität und Präzedenz Jeder Ausdruck kann mit Hilfe der Assoziativitäten Präzedenzen Stelligkeiten (Anzahl Operanden) der beteiligten Operatoren eindeutig geklammert werden (Details im Skript).

Ausdrucksbäume Klammerung ergibt Ausdrucksbaum: 9 * celsius / 5 + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Von oben nach unten im Ausdrucksbaum: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Reihenfolge ist nicht eindeutig bestimmt: 9 * celsius / 5 + 32 9 * celsius (9 * celsius) / 5 ((9 * celsius) / 5) + 32

Auswertungsreihenfolge Gültige Reihenfolge: Jeder Knoten wird erst nach seinen Kindern ausgewertet. Kinder Knoten

Auswertungsreihenfolge Gültige Reihenfolge: Jeder Knoten wird erst nach seinen Kindern ausgewertet. Kinder Knoten

Auswertungsreihenfolge Gültige Reihenfolge: Jeder Knoten wird erst nach seinen Kindern ausgewertet. Kinder Knoten

Auswertungsreihenfolge Gültige Reihenfolge: Jeder Knoten wird erst nach seinen Kindern ausgewertet. Kinder Knoten

Auswertungsreihenfolge Gültige Reihenfolge: Jeder Knoten wird erst nach seinen Kindern ausgewertet. Kinder In C++ ist die anzuwend-ende gültige Reihenfolge nicht spezifiziert. Knoten

Auswertungsreihenfolge Gültige Reihenfolge: Jeder Knoten wird erst nach seinen Kindern ausgewertet. “Guter” Ausdruck: jede gültige Reihen- folge führt zum gleichen Ergebnis Kinder In C++ ist die anzuwend-ende gültige Reihenfolge nicht spezifiziert. Knoten

Arithmetische Operatoren Symbol Stelligkeit Präzedenz Assoziativität Unäres + + 1 16 rechts Unäres - - Multiplikation * 2 14 links Division / Modulus % Addition 13 Subtraktion Operand rechts

Arithmetische Operatoren Symbol Stelligkeit Präzedenz Assoziativität Unäres + + 1 16 rechts Unäres - - Multiplikation * 2 14 links Division / Modulus % Addition 13 Subtraktion Alle Operatoren: R-Wert × R-Wert R-Wert

Division und Modulus Operator / realisiert ganzzahlige Division:

Division und Modulus Operator / realisiert ganzzahlige Division: in fahrenheit.C: 5 / 2 hat Wert 2 9 * celsius / 5 + 32: 15 degrees Celsius are 59 degrees Fahrenheit

Division und Modulus Operator / realisiert ganzzahlige Division: in fahrenheit.C: 5 / 2 hat Wert 2 9 * celsius / 5 + 32: 15 degrees Celsius are 59 degrees Fahrenheit 9 / 5 * celsius + 32: 15 degrees Celsius are 47 degrees Fahrenheit

Division und Modulus Operator / realisiert ganzzahlige Division: in fahrenheit.C: 5 / 2 hat Wert 2 9 * celsius / 5 + 32: 15 degrees Celsius are 59 degrees Fahrenheit 9 / 5 * celsius + 32: 15 degrees Celsius are 47 degrees Fahrenheit

Division und Modulus Operator / realisiert ganzzahlige Division: in fahrenheit.C: 5 / 2 hat Wert 2 9 * celsius / 5 + 32: 15 degrees Celsius are 59 degrees Fahrenheit 1 * celsius + 32: 15 degrees Celsius are 47 degrees Fahrenheit

Division und Modulus Operator / realisiert ganzzahlige Division: in fahrenheit.C: 5 / 2 hat Wert 2 9 * celsius / 5 + 32: 15 degrees Celsius are 59 degrees Fahrenheit 1 * 15 + 32: 15 degrees Celsius are 47 degrees Fahrenheit

Division und Modulus Operator / realisiert ganzzahlige Division: in fahrenheit.C: 5 / 2 hat Wert 2 9 * celsius / 5 + 32: 15 degrees Celsius are 59 degrees Fahrenheit 47: 15 degrees Celsius are 47 degrees Fahrenheit

Division und Modulus Modulus-Operator berechnet Rest der ganzzahligen Division 5 / 2 hat Wert 2 5 % 2 hat Wert 1

Division und Modulus Modulus-Operator berechnet Rest der ganzzahligen Division Es gilt immer: 5 / 2 hat Wert 2 5 % 2 hat Wert 1 (a / b) * b + a % b hat den Wert von a

Division und Modulus Modulus-Operator berechnet Rest der ganzzahligen Division Es gilt immer: Falls a oder b negativ, so gibt es zwei Möglichkeiten: 5 / 2 hat Wert 2 5 % 2 hat Wert 1 (a / b) * b + a % b hat den Wert von a

Division und Modulus Modulus-Operator berechnet Rest der ganzzahligen Division Es gilt immer: Falls a oder b negativ, so gibt es zwei Möglichkeiten: 5 / 2 hat Wert 2 (a / b) * b + a % b hat den Wert von a -5 / 2 hat Wert -2 -5 % 2 hat Wert -1 Rundung gegen 0

Division und Modulus Modulus-Operator berechnet Rest der ganzzahligen Division Es gilt immer: Falls a oder b negativ, so gibt es zwei Möglichkeiten: 5 / 2 hat Wert 2 (a / b) * b + a % b hat den Wert von a -5 / 2 hat Wert -3 -5 % 2 hat Wert 1 Rundung gegen unendlich

Division und Modulus Modulus-Operator berechnet Rest der ganzzahligen Division Es gilt immer: Meistens: falls a oder b negativ, so wird gegen 0 gerundet; 5 / 2 hat Wert 2 5 % 2 hat Wert 1 (a / b) * b + a % b hat den Wert von a

Inkrement und Dekrement Erhöhen / Erniedrigen einer Zahl um 1 ist eine häufige Operation geht für einen L-Wert so: expr = expr + 1

Inkrement und Dekrement Erhöhen / Erniedrigen einer Zahl um 1 ist eine häufige Operation geht für einen L-Wert so: Nachteile: relativ lang expr = expr + 1

Inkrement und Dekrement Erhöhen / Erniedrigen einer Zahl um 1 ist eine häufige Operation geht für einen L-Wert so: Nachteile: relativ lang expr wird zweimal ausgewertet (Effekte!) expr = expr + 1

In-/Dekrement-Operatoren Gebrauch Stelligkeit Präz. Assoz. L/R-Werte Post-Inkrement expr++ 1 17 links L-Wert -> R-Wert Prä-Inkrement ++expr 16 rechts L-Wert -> L-Wert Post-Dekrement expr-- Prä-Dekrement --expr L-Wert-> L-Wert

In-/Dekrement-Operatoren Gebrauch Effekt / Wert Post-Inkrement expr++ Wert von expr wird um 1 erhöht, der alte Wert von expr wird (als R-Wert) zurückgegeben Prä-Inkrement ++expr Wert von expr wird um 1 erhöht, der neue Wert von expr wird (als L-Wert) zurückgegeben Post-Dekrement expr-- Wert von expr wird um 1 erniedrigt, der alte Wert von expr wird (als R-Wert) zurückgegeben Prä-Dekrement --expr Wert von expr wird um 1 erniedrigt, der neue Wert

In/Dekrement-Operatoren Beispiel: int a = 7; std::cout << ++a << "\n"; std::cout << a++ << "\n"; std::cout << a << "\n";

In/Dekrement-Operatoren Beispiel: int a = 7; std::cout << ++a << "\n"; // Ausgabe 8 std::cout << a++ << "\n"; std::cout << a << "\n";

In/Dekrement-Operatoren Beispiel: int a = 7; std::cout << ++a << "\n"; // Ausgabe 8 std::cout << a++ << "\n"; // Ausgabe 8 std::cout << a << "\n";

In/Dekrement-Operatoren Beispiel: int a = 7; std::cout << ++a << "\n"; // Ausgabe 8 std::cout << a++ << "\n"; // Ausgabe 8 std::cout << a << "\n"; // Ausgabe 9

In/Dekrement-Operatoren Ist die Anweisung ++expr; äquivalent zu expr++; ?

In/Dekrement-Operatoren Ist die Anweisung ++expr; äquivalent zu expr++; ? Ja, aber… Prä-Inkrement ist effizienter (alter Wert muss nicht gespeichert werden) Post-In/Dekrement sind die einzigen linksasso-ziativen unärern Operatoren (nicht sehr intuitiv)

Arithmetische Zuweisungen Gebrauch Bedeutung += expr1 += expr2 expr1 = expr1 + expr2 -= expr1 -= expr2 expr1 = expr1 - expr2 *= expr1 *= expr2 expr1 = expr1 * expr2 /= expr1 /= expr2 expr1 = expr1 / expr2 %= expr1 %= expr2 expr1 = expr1 % expr2

Arithmetische Zuweisungen Gebrauch Bedeutung += expr1 += expr2 expr1 = expr1 + expr2 -= expr1 -= expr2 expr1 = expr1 - expr2 *= expr1 *= expr2 expr1 = expr1 * expr2 /= expr1 /= expr2 expr1 = expr1 / expr2 %= expr1 %= expr2 expr1 = expr1 % expr2 Arithmetische Zuweisungen werten expr1 nur einmal aus.

Wertebereich des Typs int b-Bit-Repräsentierung: Wertebereich umfasst die ganzen Zahlen {-2b-1, -2b-1+1,…, -1, 0, 1,…,2b-1-1}

Wertebereich des Typs int b-Bit-Repräsentierung: Wertebereich umfasst die ganzen Zahlen {-2b-1, -2b-1+1,…, -1, 0, 1,…,2b-1-1} Auf den meisten Plattformen: b = 32

Wertebereich des Typs int // Program: limits.cpp // Output the smallest and the largest value of type int. #include <iostream> #include <limits> int main() { std::cout << "Minimum int value is " << std::numeric_limits<int>::min() << ".\n" << "Maximum int value is " << std::numeric_limits<int>::max() << ".\n"; return 0; }

Wertebereich des Typs int // Program: limits.cpp // Output the smallest and the largest value of type int. #include <iostream> #include <limits> int main() { std::cout << "Minimum int value is " << std::numeric_limits<int>::min() << ".\n" << "Maximum int value is " << std::numeric_limits<int>::max() << ".\n"; return 0; } z.B. Minimum int value is -2147483648 Maximum int value is 2147483647

Überlauf und Unterlauf Arithmetische Operationen (+, -, *) können aus dem Wertebereich herausführen Ergebnisse können inkorrekt sein.

Überlauf und Unterlauf Arithmetische Operationen (+, -, *) können aus dem Wertebereich herausführen Ergebnisse können inkorrekt sein. power8.cpp: 158 = -1732076671 power20.cpp: 320 = -808182895

Überlauf und Unterlauf Arithmetische Operationen (+, -, *) können aus dem Wertebereich herausführen Ergebnisse können inkorrekt sein. Es gibt keine Fehlermeldung! power8.cpp: 158 = -1732076671 power20.cpp: 320 = -808182895

Der Typ unsigned int Wertebereich Alle arithmetischen Operatoren gibt es auch für unsigned int Literale: 1u, 17u,… {0, 1,…, 2b-1}

Gemischte Ausdrücke Operatoren können Operanden verschiedener Typen haben (z.B. int und unsigned int Solche gemischten Ausdrücke sind vom “allgemeineren” Typ unsigned int int-Operanden werden konvertiert nach unsigned int 17 + 17u

Konversion int Wert Vorzeichen unsigned int Wert x ≥ 0 < 0 x + 2b

Konversion int Wert Vorzeichen unsigned int Wert x ≥ 0 < 0 x + 2b Bei Zweierkomplement-Darstellung passiert dabei intern gar nichts!

Konversion “andersherum” Die Deklaration int a = 3u konvertiert 3u nach int (Wert bleibt erhalten, weil er im Wertebereich von int liegt; andernfalls ist das Ergebnis implementierungsabhängig)

Wahrheitswerte Boole’sche Funktionen; der Typ bool; logische und relationale Operatoren; Kurzschlussauswertung

Boole’sche Funktionen f: {0,1}n -> {0,1} 0 enstpricht “falsch” 1 entspricht “wahr”

Boole’sche Funktionen 0 enstpricht “falsch” 1 entspricht “wahr” x y AND (x,y) 1

Boole’sche Funktionen 0 enstpricht “falsch” 1 entspricht “wahr” x y OR (x,y) 1

Boole’sche Funktionen 0 enstpricht “falsch” 1 entspricht “wahr” x NOT (x) 1

Vollständigkeit AND, OR, NOT sind die in C++ verfügbaren Boole’schen Funktionen Alle anderen binären boole’schen Funktionen sind daraus erzeugbar

Vollständigkeit AND, OR, NOT sind die in C++ verfügbaren Boole’schen Funktionen Alle anderen binären boole’schen Funktionen sind daraus erzeugbar x y XOR (x,y) 1

Vollständigkeit AND, OR, NOT sind die in C++ verfügbaren Boole’schen Funktionen Alle anderen binären boole’schen Funktionen sind daraus erzeugbar x y XOR (x,y) 1 XOR (x,y) = AND (OR (x,y), NOT (AND (x,y)))

Vollständigkeit: Beweis Identifiziere binäre boole’sche Funktion mit ihrem charakteristischem Vektor:

Vollständigkeit: Beweis Identifiziere binäre boole’sche Funktion mit ihrem charakteristischem Vektor: x y XOR (x,y) 1 Charakteristischer Vektor: 0110

Vollständigkeit: Beweis Identifiziere binäre boole’sche Funktion mit ihrem charakteristischem Vektor: x y XOR (x,y) 1 Charakteristischer Vektor: 0110 XOR = f0110

Vollständigkeit: Beweis Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000

Vollständigkeit: Beweis Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000 f0001 = AND (x, y)

Vollständigkeit: Beweis Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000 f0001 = AND (x, y) f0010 = AND (x, NOT (y))

Vollständigkeit: Beweis Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000 f0001 = AND (x, y) f0010 = AND (x, NOT (y)) f0100 = AND (y, NOT (x))

Vollständigkeit: Beweis Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000 f0001 = AND (x, y) f0010 = AND (x, NOT (y)) f0100 = AND (y, NOT (x)) f1000 = NOT (OR (x, y))

Vollständigkeit: Beweis Schritt 2: erzeuge alle Funktionen f1101 = OR (f1000, OR (f0100, f0001))

Vollständigkeit: Beweis Schritt 2: erzeuge alle Funktionen f1101 = OR (f1000, OR (f0100, f0001)) f0000 = 0

Der Typ bool Repräsentiert Wahrheitswerte Literale true und false Wertebereich {true, false}

Der Typ bool Repräsentiert Wahrheitswerte Literale true und false Wertebereich {true, false} bool b = true; // Variable mit Wert true

bool vs. int: Konversion bool’s können überall dort verwendet werden, wo int’s gefordert sind, und umgekehrt

bool vs. int: Konversion bool’s können überall dort verwendet werden, wo int’s gefordert sind, und umgekehrt bool  int true 1 false

bool vs. int: Konversion bool’s können überall dort verwendet werden, wo int’s gefordert sind, und umgekehrt bool  int true 1 false int  bool  0 true false

bool vs. int: Konversion Existierende Programme verwenden oft keine bool’s, sondern nur die int’s 0 und 1; das ist aber schlechter Stil. bool  int true 1 false int  bool  0 true false

Logische Operatoren Symbol Stelligkeit Präzedenz Assoziativität Logisches Und (AND) && 2 6 links Logisches Oder (OR) || 5 Logisches Nicht (NOT) ! 1 16 rechts

Logische Operatoren bool (× bool) -> bool Symbol Stelligkeit Präzedenz Assoziativität Logisches Und (AND) && 2 6 links Logisches Oder (OR) || 5 Logisches Nicht (NOT) ! 1 16 rechts bool (× bool) -> bool

Logische Operatoren bool (× bool) -> bool Symbol Stelligkeit Präzedenz Assoziativität Logisches Und (AND) && 2 6 links Logisches Oder (OR) || 5 Logisches Nicht (NOT) ! 1 16 rechts bool (× bool) -> bool R-Wert (× R-Wert) -> R-Wert

Relationale Operatoren Symbol Stelligkeit Präzedenz Assoziativität Kleiner < 2 11 links Grösser > Kleiner oder gleich <= Grösser oder gleich >= Gleich == 10 Ungleich !=

Relationale Operatoren Symbol Stelligkeit Präzedenz Assoziativität Kleiner < 2 11 links Grösser > Kleiner oder gleich <= Grösser oder gleich >= Gleich == 10 Ungleich != Zahlentyp × Zahlentyp -> bool

Relationale Operatoren Symbol Stelligkeit Präzedenz Assoziativität Kleiner < 2 11 links Grösser > Kleiner oder gleich <= Grösser oder gleich >= Gleich == 10 Ungleich != Zahlentyp × Zahlentyp -> bool R-Wert × R-Wert -> R-Wert

DeMorgan’sche Regeln !(a && b) == (!a || !b) !(a || b) == (!a && !b)

DeMorgan’sche Regeln !(a && b) == (!a || !b) !(a || b) == (!a && !b) ! (reich und schön) == ( arm oder hässlich )

Präzedenzen Binäre arithmetische Operatoren binden stärker als Relationale Operatoren, und diese binden stärker als binäre logische Operatoren.

Präzedenzen Binäre arithmetische Operatoren binden stärker als Relationale Operatoren, und diese binden stärker als binäre logische Operatoren. 7 + x < y && y != 3 * z

Präzedenzen Binäre arithmetische Operatoren binden stärker als Relationale Operatoren, und diese binden stärker als binäre logische Operatoren. ((7 + x) < y) && (y != (3 * z))

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet x != 0 && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 1: x != 0 && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 1: x != 0 && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 1: true && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 1: true && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 0: x != 0 && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 0: x != 0 && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 0: false && z / x > y

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet X hat Wert 0: false

Kurzschlussauswertung Logische Operatoren && und ||werten den linken Operanden zuerst aus Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet x != 0 && z / x > y keine Division durch Null!