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
) die1
um11
bzw. um15
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
) die1
um11
bzw. um15
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 bei2 | 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 bei2 | 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 bei2 | 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
= 101fü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 bei2 | 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- z wird um irgendwas erhöht, das Irgendwas ist
x < y ? y++ : x++;
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 ignoriertx++
erhöht x um 1 und liefert den alten Wert von x zurück, also 5. x ist danach 6.- z wird also um 5 erhöht
x = 6
y = 2
z = 6
- z wird um irgendwas erhöht, das Irgendwas ist