ganze zahlen
Download
Skip this Video
Download Presentation
Ganze Zahlen

Loading in 2 Seconds...

play fullscreen
1 / 117

Ganze Zahlen - PowerPoint PPT Presentation


  • 80 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Ganze Zahlen' - venice


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
ganze zahlen

Ganze Zahlen

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

celsius to fahrenheit
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 fahrenheit1
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;

}

15 degrees Celsius are 59 degrees Fahrenheit.

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

Wie ist der Ausdruck geklammert?

assoziativit t und pr zedenz
Assoziativität und Präzedenz

9 * celsius / 5 + 32

bedeutet

(9 * celsius / 5) + 32

Regel 1: Punkt- vor Strichrechnung

assoziativit t und pr zedenz1
Assoziativität und Präzedenz

(9 * celsius / 5) + 32

bedeutet

((9 * celsius) / 5) + 32

Regel 2: Von links nach rechts

assoziativit t und pr zedenz2
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 zedenz3
Assoziativität und Präzedenz

-3 - 4

bedeutet

(-3) - 4

Regel 3: Unäre +,- vor binären +,-

assoziativit t und pr zedenz4
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
Ausdrucksbäume

Klammerung ergibt Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge1
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge2
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge3
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge4
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge5
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge6
Auswertungsreihenfolge

Von oben nach unten im Ausdrucksbaum:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge7
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge8
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge9
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge10
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge11
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge12
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

auswertungsreihenfolge13
Auswertungsreihenfolge

Reihenfolge ist nicht eindeutig bestimmt:

9 * celsius / 5 + 32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

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

Kinder

Knoten

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

Kinder

Knoten

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

Kinder

Knoten

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

Kinder

Knoten

auswertungsreihenfolge18
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

auswertungsreihenfolge19
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 operatoren1
Arithmetische Operatoren

Alle Operatoren: R-Wert × R-Wert R-Wert

division und modulus
Division und Modulus
  • Operator / realisiert ganzzahlige Division:
division und modulus1
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 modulus2
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 modulus3
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 modulus4
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 modulus5
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 modulus6
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 modulus7
Division und Modulus
  • Modulus-Operator berechnet Rest der ganzzahligen Division

5 / 2 hat Wert 2

5 % 2 hat Wert 1

division und modulus8
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 modulus9
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 modulus10
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 modulus11
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 modulus12
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
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 dekrement1
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 dekrement2
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 operatoren2
In/Dekrement-Operatoren

Beispiel:

int a = 7;

std::cout << ++a << "\n";

std::cout << a++ << "\n";

std::cout << a << "\n";

in dekrement operatoren3
In/Dekrement-Operatoren

Beispiel:

int a = 7;

std::cout << ++a << "\n"; // Ausgabe 8

std::cout << a++ << "\n";

std::cout << a << "\n";

in dekrement operatoren4
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 operatoren5
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 operatoren6
In/Dekrement-Operatoren

Ist die Anweisung

++expr;

äquivalent zu

expr++; ?

in dekrement operatoren7
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 zuweisungen1
Arithmetische Zuweisungen

Arithmetische Zuweisungen werten expr1 nur einmal aus.

wertebereich des typs int
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 int1
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 int2
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 int3
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
Überlauf und Unterlauf
  • Arithmetische Operationen (+, -, *) können aus dem Wertebereich herausführen
  • Ergebnisse können inkorrekt sein.
berlauf und unterlauf1
Ü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 unterlauf2
Ü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
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
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

konversion1
Konversion

Bei Zweierkomplement-Darstellung passiert dabei intern gar nichts!

konversion andersherum
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

Wahrheitswerte

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

boole sche funktionen
Boole’sche Funktionen
  • Boole’sche Funktion:

f: {0,1}n -> {0,1}

  • 0 enstpricht “falsch”
  • 1 entspricht “wahr”
boole sche funktionen1
Boole’sche Funktionen
  • Boole’sche Funktion:

f: {0,1}2 -> {0,1}

  • 0 enstpricht “falsch”
  • 1 entspricht “wahr”
boole sche funktionen2
Boole’sche Funktionen
  • Boole’sche Funktion:

f: {0,1}2 -> {0,1}

  • 0 enstpricht “falsch”
  • 1 entspricht “wahr”
boole sche funktionen3
Boole’sche Funktionen
  • Boole’sche Funktion:

f: {0,1}1 -> {0,1}

  • 0 enstpricht “falsch”
  • 1 entspricht “wahr”
vollst ndigkeit
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 ndigkeit1
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 ndigkeit2
Vollständigkeit
  • AND, OR, NOT sind die in C++ verfügbaren Boole’schen Funktionen
  • Alle anderen binären boole’schen Funktionen sind daraus erzeugbar

XOR (x,y) =

AND (OR (x,y), NOT (AND (x,y)))

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

Charakteristischer Vektor: 0110

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

Charakteristischer Vektor: 0110

XOR = f0110

vollst ndigkeit beweis3
Vollständigkeit: Beweis
  • Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000
vollst ndigkeit beweis4
Vollständigkeit: Beweis
  • Schritt 1: erzeuge die Funktionen f0001, f0010, f0100, f1000

f0001 = AND (x, y)

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

f0001 = AND (x, y)

f0010 = AND (x, NOT (y))

vollst ndigkeit beweis6
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 beweis7
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 beweis8
Vollständigkeit: Beweis
  • Schritt 2: erzeuge alle Funktionen

f1101 = OR (f1000, OR (f0100,f0001))

vollst ndigkeit beweis9
Vollständigkeit: Beweis
  • Schritt 2: erzeuge alle Funktionen

f1101 = OR (f1000, OR (f0100,f0001))

f0000 = 0

der typ bool
Der Typ bool
  • Repräsentiert Wahrheitswerte
  • Literale true und false
  • Wertebereich{true, false}
der typ bool1
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 vs. int: Konversion
  • bool’s können überall dort verwendet werden, wo int’sgefordert sind, und umgekehrt
bool vs int konversion1
bool vs. int: Konversion
  • bool’s können überall dort verwendet werden, wo int’sgefordert sind, und umgekehrt
bool vs int konversion2
bool vs. int: Konversion
  • bool’s können überall dort verwendet werden, wo int’sgefordert sind, und umgekehrt
bool vs int konversion3
bool vs. int: Konversion
  • Existierende Programme verwenden oft keine bool’s, sondern nur die int’s 0 und 1; das ist aber schlechter Stil.
logische operatoren1
Logische Operatoren

bool (× bool) -> bool

logische operatoren2
Logische Operatoren

bool (× bool) -> bool

R-Wert (× R-Wert) -> R-Wert

relationale operatoren1
Relationale Operatoren

Zahlentyp × Zahlentyp -> bool

relationale operatoren2
Relationale Operatoren

Zahlentyp × Zahlentyp -> bool

R-Wert × R-Wert -> R-Wert

demorgan sche regeln
DeMorgan’sche Regeln
  • !(a && b) == (!a || !b)
  • !(a || b) == (!a && !b)
demorgan sche regeln1
DeMorgan’sche Regeln
  • !(a && b) == (!a || !b)
  • !(a || b) == (!a && !b)

! (reichundschön) == ( arm oderhässlich )

pr zedenzen
Präzedenzen

Binäre arithmetischeOperatoren

binden stärker als

Relationale Operatoren,

und diese binden stärker als

binäre logischeOperatoren.

pr zedenzen1
Präzedenzen

Binäre arithmetischeOperatoren

binden stärker als

Relationale Operatoren,

und diese binden stärker als

binäre logischeOperatoren.

7 + x < y && y != 3 * z

pr zedenzen2
Präzedenzen

Binäre arithmetischeOperatoren

binden stärker als

Relationale Operatoren,

und diese binden stärker als

binäre logischeOperatoren.

((7 + x) < y) && (y != (3 * z))

kurzschlussauswertung
Kurzschlussauswertung
  • Logische Operatoren && und ||werten den linken Operanden zuerst aus
  • Falls das Ergebnis dann schon feststeht, wird der rechte Operand nicht mehr ausgewertet
kurzschlussauswertung1
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

kurzschlussauswertung2
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

kurzschlussauswertung3
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

kurzschlussauswertung4
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

kurzschlussauswertung5
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

kurzschlussauswertung6
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

kurzschlussauswertung7
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

kurzschlussauswertung8
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

kurzschlussauswertung9
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

kurzschlussauswertung10
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!

ad