inkrement / dekrement

  • hallo ...ich habs nicht so drauf mit inkrement/dekrement ...schrteib aber ne prüfung heut mittag ..... kann mir jemand folgende 2 aufgaben lösen ...bitte :


    welche werte haben a und b nach ausführen der anweisungen :

    1.) int a = 2, b = 1;

    if (--a || --b) a++;

    2.) int a = 2, b = 1;

    if (--a && --b) a++;


    danke schonmal ...grüße .... bitte schnell beantworten :cry:

  • Bei 1. ändert sich garnichts, da zuerst --a ausgeführt wird, was a == 1 ergibt. Aufgrund dessen wird der zweite Teil von der if() Anweisung nicht mehr ausgeführt, weil es sowieso true ergeben würde. Und mit a++ wird a wieder inkrementiert.

    Also 1: a == 2 und b == 1

    Bei 2. muss der zweite Teil der if() Anweisung geprüft werden (hier ein &&, kein || ). Und da b == 0, ist die Abfrage false.

    Also 2: a == 1, b == 0

    Viel Glück bei der Prüfung.

  • Salut,

    das ist relativ einfach.

    Punkt 1:
    ++ heißt, dass der Wert um eins erhöht wird (Inkrement)
    -- heißt, dass der Wert um eins runtergesetzt wird (Dekrement)

    Punkt 2:
    jetzt kommt es noch drauf an, ob der Operator vor oder nach der Variablen steht. Steht er davor, wird erst um 1 in/dekrementiert und dann der Ausdruck ausgewertet, steht er dahinter, wird nach Auswertung des Ausdrucks in/dekrementiert (bei der Auswertung zählt also der alte Wert der Variablen).

    Also:
    1.) int a = 2, b = 1;
    [a = 2, b = 1]
    if (--a || --b) // es wird erst dekrementiert, also (dann eingesetzt) 1 || 0 geprüft, ist wahr, also Anweisung wird ausgeführt
    {
    [a = 1, b = 0]
    a++; // hier ist es übrigens egal, ob davor oder danach
    [a = 2, b = 0]
    }
    [a = 2, b = 0]

    2.)
    int a = 2, b = 1;
    [a = 2, b = 1]
    if (--a || --b) // es wird erst dekrementiert, also (dann eingesetzt) 1 && 0 geprüft, ist falsch, also Anweisung wird nicht ausgeführt
    {
    a++;
    }
    [a = 1, b = 0]

    EditWasserleiche hat recht bei Punkt 1, da schon --a = 1, wird der zweite Teil gar nicht mehr geprüft. Ständen statt zwei | nur eins dort, wäre meins richtig)

    Hope that helps,

    Stefan