Algorithmen & Programmierung. Ausdrücke & Operatoren (1)

Ähnliche Dokumente
Ausdrücke (1) Grundlegende Eigenschaften

Einstieg in die Informatik mit Java

Ausdrücke der Programmiersprache Java

Einstieg in die Informatik mit Java

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

5.3 Auswertung von Ausdrücken

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Programmieren 1 C Überblick

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Operatoren in C/C++ und Java:

Vorlesung 6: Operatoren, Logische Ausdrücke

Einstieg in die Informatik mit Java

Nino Simunic M.A. Computerlinguistik, Campus DU

3. Operatoren und Ausdrücke

3. Operatoren und Ausdrücke

3. Operatoren und Ausdrücke

Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben einen Datentyp, der schon bei der Kompilierung festgelegt wird.

Grundlagen der Informatik 2. Operatoren

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

5.3 Auswertung von Ausdrücken

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Vorkurs Informatik WiSe 17/18

Operatoren in C. Gastvorlesung Andreas Textor

5.3 Auswertung von Ausdrücken

Ausdrücke. Kapitel Allgemeines

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Grundlagen der Modellierung und Programmierung, Übung

Algorithmen & Programmierung. Logik

Handbuch der Java-Programmierung

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Martin Unold INFORMATIK. Geoinformatik und Vermessung

String-Konkatenation

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

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Programmiersprachen Einführung in C

Gliederung Programmiersprachen. Programmiersprachen Einführung in C. Ausdrücke in Programmiersprachen ~ Aufbau mathematischer Formeln

Projekt 3 Variablen und Operatoren

Vorkurs Informatik WiSe 16/17

Java ist statisch typisiert, d.h., Variablen, Ergebnisse von Ausdrücken, etc. haben ein Datentyp, der schon bei der Kompilierung festgelegt wird.

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Informatik 1 ( ) D-MAVT F2011. Operatoren, Auswertungsreihenfolge, Fliesskommazahlen. Yves Brise Übungsstunde 2

Kompaktkurs Einführung in die Programmierung. 3. Fundamentale Datentypen, Ausdrücke

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Java - Schleifen. Bedingung. wiederhole. Anweisung Anweisung Anweisung. Leibniz Universität IT Services Anja Aue

Semantik von Ausdrücken

Dr. Monika Meiler. Inhalt

PIC16 Programmierung in HITECH-C

Operatoren und Ausdrücke

C- Kurs 03 Ausdrücke und Operatoren

Operatoren (1) Operatoren (2)

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

Java Einführung Operatoren Kapitel 2 und 3

Angewandte Mathematik und Programmierung

ModProg 15-16, Vorl. 5

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

Repetitorium Programmieren I + II

4.2 Programmiersprache C

Kapitel 05. Datentypen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Informatik 1 ( ) D-MAVT F2010. Operatoren, Auswertungsreihenfolge, Fliesskommazahlen. Yves Brise Übungsstunde 2

Programmieren I. Operatoren und Ausdrücke Heusch 6.2 Ratz Institut für Angewandte Informatik

Modellierung und Programmierung 1

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

Java für Anfänger Teil 3: Integer-Typen. Programmierkurs Manfred Jackel

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Operatoren und Ausdrücke

Kapitel 2: Ausdrücke. 1. Sorten und abstrakte Datentypen. 2. Ausdrücke 2.1 Syntax 2.2 Semantik 2.3 Ausdrücke in Java. 3. Funktionale Algorithmen

Java I Vorlesung Imperatives Programmieren

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

2. Ganze Zahlen int unsigned int

2 LOGISCHE AUSDRÜCKE, BITOPERATIONEN

Ganze Zahlen. Die Typen int, unsigned int; Auswertung arithmetischer Ausdrücke, arithmetische Operatoren

3. Java - Sprachkonstrukte I

8. Ausdrücke, Operatoren (einfache Typen)

Rechnungen, wo kein sinnvoller Wert rauskommt Bsp.: 1/0, *0, sqrt(-1.0) Beispiel: Quadratische Gleichungen

2. Ganze Zahlen int unsigned int

JAVA-Datentypen und deren Wertebereich

3. Ganze Zahlen int unsigned int

Softwareentwicklung Ausdrücke und Typkonversionen

3.4 Struktur von Programmen

3. Java - Sprachkonstrukte I

8. Ausdrücke, Operatoren (einfache Typen)

Programmieren I. Kapitel 5. Kontrollfluss

4. Zahlendarstellungen

2. Ganze Zahlen. Auswertung arithmetischer Ausdrücke, Assoziativität und Präzedenz, arithmetische Operatoren, Wertebereich der Typen int, unsigned int

Java für Anfänger Teil 3: Integer-Typen. Programmierkurs Manfred Jackel

Informatik I Übung, Woche 40

Einführung in die Programmierung II. 5. Zeiger

Kapitel 4: Elementare Konzepte von Programmiersprachen. Variablen Referenzen Zuweisungen

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Transkript:

Algorithmen & Programmierung Ausdrücke & Operatoren (1)

Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck entsteht Ausdruck, der durch Anwendung eines zweistelligen (binären) Operators auf zwei Ausdrücke entsteht Ausdruck, der durch Anwendung eines dreistelligen (ternären) Operators auf drei Ausdrücke entsteht Gemeinsame Eigenschaft Jede Komponente eines Ausdrucks (Teilausdruck) besitzt einen Wert. 271

Literale Bedeutung Literale bezeichnen direkte Werte eines Basistyps in C. Wir unterscheiden logische, numerische und Zeichenliterale. Für Literale gelten syntaktische Regeln, damit der Compiler sie identifizieren kann. Datentyp bool int float double Zeichenkette Literale (Beispiele) true false -15263 56-1.0 4.56e-12 "Guten Morgen" 272

Operatoren Operatoren in C () [] ->.! ~ ++ -- + - * & sizeof / % << >> < <= > >= ==!= ^ &&?: = += -= *= /= %= &= ^= = <<= >>=, Stelligkeit von Operatoren einstellige (unäre) Operatoren haben genau einen Operanden, z.b. Vorzeichenoperator - zweistellige (binäre) Operatoren haben genau zwei Operanden, z.b. Additionsoperator + dreistellige (ternäre) Operatoren haben genau drei Operanden, z.b. Bedingungsoperator?: Operand Die Operanden eines Operators sind Ausdrücke. Rückgabewert Alle Operatoren haben einen Rückgabewert. 273

Interpretation von Ausdrücken Ausdrücke können je nach Kontext verschieden interpretiert werden: nach ihrem tatsächlichen (meist arithmetischen) Wert nach einem Wahrheitswert (Wert Null entspricht false, jeder andere Wert entspricht true) Da jeder Ausdruck in C einen Wert zurückliefert und Werte grundsätzlich als Wahrheitswerte interpretierbar sind, können wir für Selektion und Iteration ganz allgemein schreiben: Selektion if ( Ausdruck ) // Wenn Wert von Ausdruck ungleich 0 bzw. true Anweisung1 // wird Anweisung1 ausgeführt else // sonst Anweisung2 // wird Anweisung2 ausgeführt Iteration while ( Ausdruck ) // Solange Wert von Ausdruck ungleich 0 bzw. true Anweisung // wird Anweisung ausgeführt 274

Auswertung von Ausdrücken

Auswertung von Ausdrücken Ausdrücke müssen ausgewertet werden. Dabei wird aus den Werten der einzelnen Komponenten des Ausdrucks ein Gesamtwert ermittelt, der sich aus der Semantik der verwendeten Operatoren ergibt. Jeder Ausdruck besitzt einen Wert. Die Reihenfolge der Auswertung von Ausdrücken ist in C genau festgelegt: Priorität Jeder Operator besitzt eine bestimmte Prioriät Die Operatoren werden in der Reihenfolge ihrer Priorität ausgeführt, wobei die Ausführung mit den Operatoren der höchsten Priorität beginnt. Ausnahme Klammerung innerhalb von Ausdrücken setzt die Festlegung der Auswertungsreihenfolge nach Priorität außer Kraft. 276

Priorität der Operatoren Operator Symbol Priorität Operator Symbol Priorität Elementselektion. 15 unäres Plus + 14 Zeigerselektion -> 15 Adresse & 14 Indizierung [] 15 Dereferenzierung * 14 Funktionsaufruf () 15 Typumwandlung () 14 Postinkrement ++ 15 Multiplikation * 13 Postdekrement -- 15 Division / 13 Objekt-/Typgröße sizeof 14 Modulo % 13 Präinkrement ++ 14 Addition + 12 Prädekrement -- 14 Subtraktion - 12 Komplement ~ 14 Linksschieben << 11 Negation! 14 Rechtsschieben >> 11 unäres Minus - 14 277

Priorität der Operatoren Operator Symbol Priorität Operator Symbol Priorität Kleiner < 10 Multiplikation und Zuweisung *= 3 Kleiner gleich <= 10 Division und Zuweisung /= 3 Größer > 10 Modulo und Zuweisung %= 3 Größer gleich >= 10 Addition und Zuweisung += 3 Gleichheit == 9 Subtraktion und Zuweisung -= 3 Ungleichheit!= 9 Linksschieben und Zuweisung <<= 3 Bitweises Und & 8 Rechtsschieben und Zuweisung >>= 3 Bitweises XOR ^ 7 Bitweises Und und Zuweisung &= 3 Bitweises Oder 6 Bitweises Oder und Zuweisung = 3 Logisches Und && 5 Bitweises XOR und Zuweisung ^= 3 Logisches Oder 4 Bedingungsoperator?: 2 Zuweisung = 3 Komma, 1 278

Auswertung von Ausdrücken Die Reihenfolge der Auswertung von Ausdrücken ist in C genau festgelegt: Assoziativität Besitzen zwei mögliche nächste Operatoren dieselbe Priorität, dann entscheidet die Assoziativität über die Reihenfolge der Auswertung. Binäre Operatoren Mit Ausnahme des Zuweisungsoperators sind alle binären Operatoren linksassoziativ (links bindend), d.h. dass Operatoren mit gleicher Priorität in der Reihenfolge ihres Auftretens ausgewertet werden. Weitere Operatoren Unäre und ternäre Operatoren sind rechtsassoziativ Ausnahme Eine Klammerung von Ausdrücken setzt die Auswertungsreihenfolge bzgl. Assoziativität außer Kraft. 279

Auswertung von Ausdrücken Achtung Die Berechnungsreihenfolge von Operanden wird durch die Priorität und Assoziativität geregelt. Diese Regelung bezieht sich jedoch nur auf die Frage, in welcher Reihenfolge die Werte der Operanden in die Berechnung einfließen. Falls die Operanden selbst wieder zusammengesetzte Ausdrücke sind, wird keine Aussage darüber getroffen, welcher dieser Teilausdrücke zuerst ausgewertet wird. Diese Entscheidung trifft (bis auf drei Ausnahmen) ausschließlich der Compiler. Konsequenz bei Verwendung von Funktionen in Ausdrücken Spielt die Aufrufreihenfolge von zwei oder mehr Funktionen eine Rolle, dann darf in einem Ausdruck maximal ein Funktionsaufruf durchgeführt werden. 280

Auswertung von Ausdrücken Motivation Bei den logischen Verknüpfungsoperatoren && und kann oft das Ergebnis des Gesamtausdrucks bestimmt werden, ohne den Ausdruck komplett berechnen zu müssen. Kurzschlussoperatoren Bei den logischen Verknüpfungsoperatoren && und ist im Gegensatz zu den meisten anderen Operatoren die Auswertungsreihenfolge von Teilausdrücken festgelegt. Die verknüpften Teilausdrücke werden stets von links nach rechts ausgewertet. Dabei ist jedoch zu beachten, dass bei gemeinsamen Auftreten der beiden Operatoren && eine höhere Priorität als hat. Die Auswertung endet, wenn das Ergebnis feststeht (und es sinnbildlich zum Kurzschluss kommt). Achtung Insbesondere bei der Verwendung von Funktionsaufrufen in logisch verknüpften Ausdrücken ist Vorsicht geboten. 281

Ausdrucksanweisungen

Ausdrucksanweisungen Regel In C kann jeder Ausdruck zu einer Anweisung werden. Dies geschieht einfach durch Anhängen eines Semikolons an einen beliebigen Ausdruck. Ausdruck versus Anweisung Ausdrücke haben immer einen Wert und können damit Teil eines größeren Ausdrucks sein. Anweisungen können dies aufgrund des fehlenden (bzw. nicht berücksichtigten) Wertes nicht. Ausdruck versus Funktion Ein Ausdruck kann als Funktion seiner Variablen betrachtet werden. Der Wert eines Ausdrucks korrespondiert damit zum Funktionswert einer Funktion. Wie ein Funktionswert besitzt auch der Wert eines Ausdrucks einen Typ, der jedoch meist nicht im Vorhinein feststeht, sondern sich bei Typverschiedenheit meist aus den Regeln der impliziten Typumwandlung ergibt. 283

Ausdrucksanweisungen Problem Ausdrucksanweisungen vergessen ihren berechneten Wert. Nebeneffekte Es gibt einige Operatoren, die während der Auswertung eines Ausdrucks auch die Werte von Variablen verändern können. Diese Nebenwirkungen werden als Nebeneffekte (manchmal auch fälschlicherweise als Seiteneffekte) bezeichnet. Verwendung von Ausdrucksanweisungen Ausdrucksanweisungen sind nur dann sinnvoll, wenn der zugrundeliegende Ausdruck Nebeneffekte bewirkt. Beispiel Wir haben bereits eine Ausdrucksanweisung mit Nebeneffekten verwendet: Die Zuweisungsoperation 284

Die Zuweisung Zuweisung als Ausdruck Ein Variablenzuweisung mit dem Operator = stellt einen gültigen Ausdruck in C dar. Nebeneffekt Die Nebenwirkung der Zuweisungsoperation stellt die Wertänderung einer Variablen, d.h. eines Speicherobjektes dar. Rückgabewert Der zugewiesene Wert ist gleichzeitig der Rückgabewert des Ausdrucks Zuweisung. Nützliche Konsequenz Mehrfachzuweisungen 285

Die Zuweisung Zuweisung als Ausdruck Ein Variablenzuweisung mit dem Operator = stellt einen gültigen Ausdruck in C dar. Achtung Der Rückgabewert des Zuweisungsoperators sollte niemals in weiteren Berechnungen genutzt werden. Gefährliche Fehlerquelle Da Zuweisungen an jeder Stelle möglich sind, an der Ausdrücke stehen können, besteht auch die syntaktische Möglichkeit, Zuweisungen als Selektions- oder Iterationskriterien zu verwenden. Hierbei kommt es zur (meist unabsichtlichen) Verwechslung der Vergleichsoperators == mit dem Zuweisungsoperator =. Dies ist eine häufige und gefährliche Fehlerquelle in C-Programmen! 286

Die Zuweisung Besonderheit Aufgrund des bei der Zuweisung auftretenden Nebeneffektes der Wertveränderung eines Objekts darf die linke Seite des Zuweisungsoperators nicht irgendein beliebiger Ausdruck sein, sondern muss genau ein Objekt darstellen, das Werte speichern kann. Lvalue Ein Ausdruck stellt ein Lvalue (left value) dar, wenn er sich auf ein Speicherobjekt bezieht. Lvalues können links und rechts des Zuweisungsoperators stehen. Rvalue Ein Ausdruck, der kein Lvalue darstellt wird als Rvalue (right value) bezeichnet Er bezieht sich nicht auf ein Speicherobjekt und deshalb kann ihm kein Wert zugewiesen werden Rvalues dürfen ausschließlich rechts des Zuweisungsoperators stehen 287

Ende der Vorlesung