Ausgabe des Programms



  • user637 schrieb:

    Und, was die Zeile 17 -19(Bitverschiebung angeht), weiß ich leider nicht weiter bei den Oder Zeichen 11 um 1 nach links oder 15 um 1 nach links

    Es wird ( 1 << 11 ) die 1 um 11 bzw. um 15 Positionen nach links geschoben.



  • Swordfish schrieb:

    user637 schrieb:

    Und, was die Zeile 17 -19(Bitverschiebung angeht), weiß ich leider nicht weiter bei den Oder Zeichen 11 um 1 nach links oder 15 um 1 nach links

    Es wird ( 1 << 11 ) die 1 um 11 bzw. um 15 Positionen nach links geschoben.

    Und was von beiden wird verschoben, bzw berücksichtigt beim | Zeichen?



  • user637 schrieb:

    i=0x00FF | ( (1<<11) | (1<<15) );
    

    Beides wird ausgewertet und die Ergebnisse sind Operanden des bitweisen Oders ( | ).



  • Swordfish schrieb:

    user637 schrieb:

    i=0x00FF | ( (1<<11) | (1<<15) );
    

    Beides wird ausgewertet und die Ergebnisse sind Operanden des bitweisen Oders ( | ).

    Und welches gilt nun, wenn Oder der Operator ist?



  • Die Frage "welches gilt nun" ist sinnfrei. Die würdest Du bei 2 + 4 auch nicht stellen. Warum stellst Du sie dann bei 2 | 4 ?

    1<<11     => 0000100000000000 == 0x0800
        1<<15     => 1000000000000000 == 0x8000
    1<<11 | 1<<15 => 1000100000000000 == 0x8800
    


  • Swordfish schrieb:

    Die Frage "welches gilt nun" ist sinnfrei. Die würdest Du bei 2 + 4 auch nicht stellen. Warum stellst Du sie dann bei 2 | 4 ?

    1<<11     => 0000100000000000 == 0x0800
        1<<15     => 1000000000000000 == 0x8000
    1<<11 | 1<<15 => 1000100000000000 == 0x8800
    

    Weil | Oder bedeutet und bei Und beides gilt.
    Aber auf mich wirkt das gerade wie eine & Verknüpfung, so wie du das verbunden hast..
    Würde bei & was anders rauskommen? Wollte mich übrigens für deinen Rat bedanken.



  • user637 schrieb:

    Swordfish schrieb:

    Die Frage "welches gilt nun" ist sinnfrei. Die würdest Du bei 2 + 4 auch nicht stellen. Warum stellst Du sie dann bei 2 | 4 ?

    1<<11     => 0000100000000000 == 0x0800
        1<<15     => 1000000000000000 == 0x8000
    1<<11 | 1<<15 => 1000100000000000 == 0x8800
    

    Weil | Oder bedeutet und bei Und beides gilt.

    Du hast nichts verstanden... schau dir die Verknüpfungen doch noch mal genauer an, in deinem Buch oder Skript oder was weiß ich



  • Bei "und" käme folgendes raus: 0000000000000000

    Du musst unterscheiden zwischen dem Bitweisen Operatoren & und | und den logischen Operatonen || und && die Wahrheitswerte auswerten.

    Als Beispiel für |:
    101 | 001: von links nach recht -> 1 oder 0: 1, 0 oder 0: 0, 1 oder 1: 1
    = 101

    für &:

    101 & 001: von links nach recht -> 1 und 0: 0, 0 und 0: 0, 1 und 1: 1
    = 001



  • user637 schrieb:

    Swordfish schrieb:

    Die Frage "welches gilt nun" ist sinnfrei. Die würdest Du bei 2 + 4 auch nicht stellen. Warum stellst Du sie dann bei 2 | 4 ?

    1<<11     => 0000100000000000 == 0x0800
        1<<15     => 1000000000000000 == 0x8000
    1<<11 | 1<<15 => 1000100000000000 == 0x8800
    

    Weil | Oder bedeutet und bei Und beides gilt.
    Aber auf mich wirkt das gerade wie eine & Verknüpfung, so wie du das verbunden hast..
    Würde bei & was anders rauskommen? Wollte mich übrigens für deinen Rat bedanken.

    x=5; y=2; z=1; 
       z += x<y ? y++ : x++; 
       cout << x << " " << y << " " << z << endl;
    

    Und wie löst man das?



  • Zerlegen.
    Einfach von links nach rechts lesen:

    x = 5
    y = 2
    z = 1

    1. z wird um irgendwas erhöht, das Irgendwas ist x < y ? y++ : x++;
    2. x < y ist für x=5 und y=2 false, also wird der rechte Teil des ternären Ausdrucks ausgeführt; der linke wird ignoriert
    3. x++ erhöht x um 1 und liefert den alten Wert von x zurück, also 5. x ist danach 6.
    4. z wird also um 5 erhöht

    x = 6
    y = 2
    z = 6


Anmelden zum Antworten