Click here to load reader

Programmierkurs C3. Operatoren und Ausdrücke3 - 1© Wolfgang Effelsberg 3. Operatoren und Ausdrücke Ausdruck (expression): Verarbeitungsvorschrift zur Ermittlung

  • View
    102

  • Download
    0

Embed Size (px)

Text of Programmierkurs C3. Operatoren und Ausdrücke3 - 1© Wolfgang Effelsberg 3. Operatoren und...

  • Folie 1
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 1 Wolfgang Effelsberg 3. Operatoren und Ausdrcke Ausdruck (expression): Verarbeitungsvorschrift zur Ermittlung eines Wertes besteht aus Operanden und Operatoren wichtigste Ausdrcke: arithmetische und logische (Boole'sche) Ausdrcke Beispiele: inti = 5, j = 2, k = 23; floatx = 2.0, y = 5.5; doubled = 2.4; Beachte: % ist der modulo-Operator (Rest bei der Ganzzahldivision). AusdruckResultat i / j2 k % i * j6 k 7 % 521 x * y 74.0 y / x2.75 y % xnicht erlaubt d / 21.2
  • Folie 2
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 2 Wolfgang Effelsberg Operatoren und Ausdrcke (2) Regeln: Bei der Auswertung gelten Vorrangregeln, z. B. Punktrechnung geht vor Strichrechnung. a/b ergibt fr a, b int wiederum einen int-Wert, nmlich den Ganzzahl- Anteil der Division. Achtung! Es wird nicht kaufmnnisch gerundet! a%b (die Modulo-Funktion) ist auf float und double nicht erlaubt. Bei Mischung von int und float/double in einem Ausdruck ist das Resultat float/double.
  • Folie 3
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 3 Wolfgang Effelsberg Der L-Wert (1) Ein L-Wert ist ein Ausdruck, der ein Objekt (einen benannten Speicherbe- reich) bezeichnet. L-Werte sind Objekte, denen Ergebnisse von Operationen zugeordnet werden knnen. Ein Beispiel fr einen L-Wert ist ein Variablenname mit geeignetem Typ und passender Speicherklasse. Manche Operatoren erwarten L-Werte als Operanden, manche liefern einen L-Wert als Resultat. Vereinfacht kann man sich merken, dass ein L-Wert etwas ist, was auf der linken Seite einer Wertzuweisung stehen darf.
  • Folie 4
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 4 Wolfgang Effelsberg Der L-Wert (2) L-Wert ( [ * ) Bezeichner ] L-Wert Bezeichner L-Wert Ausdruck. ->
  • Folie 5
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 5 Wolfgang Effelsberg Adressoperator Beispiel: &y (dazu spter mehr im Kapitel ber Zeigerarithmetik) Adressoperator L-Wert &
  • Folie 6
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 6 Wolfgang Effelsberg Arithmetische Operatoren Beispiele: a+b (x-y)/(z%5) Arithmetischer Ausdruck Ausdruck 1arithm. OperatorAusdruck 2 -*/%+ Arithmetischer Operator
  • Folie 7
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 7 Wolfgang Effelsberg Zuweisungsoperator Beispiele: a += 5/* dasselbe wie a = a + 5 */ l[a]= 17 + 4 a = b = c = 7 Zuweisung L-WertZuweisungsoperatorAusdruck -*/%+ Zuweisungsoperator ^|>>float), so sollte explizit konvertiert werden, um anzuzeigen, wie die Konvertierung vom Programmierer gewollt ist. Beispiel: int a; doublex; a = (int) (5 * x); cast-Operator Typname ( Ausdruck )
  • Folie 14
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 14 Wolfgang Effelsberg Der sizeof-Operator C verwendet den unren Operator sizeof, um die Anzahl von Bytes zu bestimmen, die zur Speicherung eines Objektes bentigt werden. Beispiel: int a; sizeof(char)/* liefert in der Regel 1 */ sizeof(a*2)/* liefert sizeof(int) */ )( sizeof-Operator Typname sizeof Ausdruck
  • Folie 15
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 15 Wolfgang Effelsberg Vergleichsoperatoren (1) != = Gleichheitsoperator Ausdruck 1Ausdruck 2 >=< Relationsoperator Ausdruck 2 Ausdruck 1 Vergleich Relationsoperator Gleichheitsoperator
  • Folie 16
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 16 Wolfgang Effelsberg Vergleichsoperatoren (2) Die Rangordnung (Przedenz) der Relationsoperatoren ist kleiner als die der arithmetischen Operatoren. Die Rangordnung der Gleichheitsoperatoren ist kleiner als die der Relations- operatoren. Das Ergebnis eines Vergleichsoperators liefert entweder falsch oder wahr. Beispiele: a == b y >= z Merke: Das einfache Gleichheitszeichen ist in C der Zuweisungsoperator, nicht der Vergleichsoperator ist gleich !
  • Folie 17
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 17 Wolfgang Effelsberg Logische Operatoren && ist das logische UND, | | ist das logische ODER. Die Wertigkeit von && ist hher als die von | |, aber beide haben eine klei- nere Wertigkeit als unre, arithmetische und Vergleichsoperatoren. Lediglich die Zuweisungsoperatoren haben eine noch geringere Wertigkeit. || && logische Verknpfung Ausdruck 1Ausdruck 2
  • Folie 18
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 18 Wolfgang Effelsberg Der Komma-Operator Zwei durch Komma getrennte Ausdrcke werden nacheinander von links nach rechts ausgefhrt. Datentyp und Resultat des Ausdrucks sind vom Typ und Wert von Ausdruck 2. Beispiel: for (s = 0, i = 0; i< n; i++) s += x[i]; summiert die Elemente des Vektors x[ ]. Komma-Ausdruck Ausdruck 1Ausdruck 2,
  • Folie 19
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 19 Wolfgang Effelsberg Spezielle Operatoren: Bitoperatoren (1) Die kleinste adressierbare Speichereinheit in C ist ein Byte (char). Es ist aber mglich, auch auf einzelne Bits zuzugreifen. Dies erfolgt mit Hilfe der Bitoperatoren. Bitweise logische Operatoren: Shift-Operatoren (Linksverschiebung, Rechtsverschiebung): AktionSymbol bitweises Komplement~ bitweises AND& bitweises OR| bitweises XOR^ leftshift>
  • Folie 20
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 20 Wolfgang Effelsberg Spezielle Operatoren: Bitoperatoren (2) Der Operator ~ ist als einziger unr (monadisch, einstellig). Er bildet das Komplement. Beispiel: x = (int) 5 (dezimal) => x = 0000000000000101 (binr) => ~x = 1111111111111010 (binr) Die anderen Operatoren sind duadische (zweistellige) Operatoren und ar- beiten bitweise, wie in der Logik definiert. Beispiel: x = 1100 (binr) y = 1010 (binr) => x ^ y = 0110 (binr) (XOR-Operation) Achtung! Die Verwechslung von && mit & sowie von | | mit | ist ein hufiger Programmierfehler in C!
  • Folie 21
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 21 Wolfgang Effelsberg Bitoperatoren (1) Die Shift-Operatoren verschieben den gesamten Bitstring um n Bits nach rechts oder links. Bits, die ber die rechte bzw. linke Grenze des Operanden hinaus laufen, gehen verloren. Beispiel: x = 0x05 (= 5 dezimal) x
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 32 Wolfgang Effelsberg Operatoren (2) RangArtSymbol in der Logik/ Arithmetik Operator in C NameBeispiel 2monadisch &Adresse& a 3dyadisch/ arithmetisch/ multiplikativ * / DIV MOD *//%*//% Multiplikation Divison ganzzahl. Division ganzzahliger Rest 3 * 4 3 / 4 3 / 4 = 0 3 % 4 = 3 4dyadisch/ arithmetisch/ additiv +-+- +-+- Addition Subtraktion 3 + 4 3 - 4 5dyadisch/ logisch LSHIFT> 5 6dyadisch/ logisch < < >= Relationsoperatorena > b
  • Folie 33
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 33 Wolfgang Effelsberg Operatoren (3) RangArtSymbol in der Logik/ Arithmetik Operator in C NameBeispiel 7dyadisch== =! == =! Gleichheits- operatoren a = b 8dyadisch/ logisch/ multiplikativ &Logisches UND auf Bits x & y 9dyadisch/ logisch/ multiplikativ XOR^Logisches XOR auf Bits x ^y 10dyadisch/ logisch/ additiv |logisches ODER auf Bits x | y 11dyadisch/ logisch/ multiplikativ &&logisches UNDa && b
  • Folie 34
  • Programmierkurs C3. Operatoren und Ausdrcke3 - 34 Wolfgang Effelsberg Operatoren (4) RangArtSymbol in der Logik/ Arithmetik Operator in C NameBeispiel 12dyadisch/ logisch/ additiv ||logisches ODERa || b 13? :bedingter Ausdrucka ? c : b 14= += -= *= /= %= &= ^= |= >= Zuweisungs- operatoren a += 1 a = a+1 15,Kommaoperators = 0, i = 0