Worin liegt bei beiden der unterschied?
1 | a = 0x01; |
2 | |
3 | b = a<<4; ergibt 16 |
4 | |
5 | b = 4<<a; ergibt 8 |
|
|
Forum: Compiler & IDEs bitshift-> b = a<<4; ist nicht das selbe wie b = 4<<a;Worin liegt bei beiden der unterschied?
Morgen, einmal shiftest du den Wert von 'a' um 4 Stellen und das andere mal shiftest du die '4' um 'a' Stellen. 1) Gleichung:
ergibt:
2) Gleichung:
ergibt:
Stephan Einmal steht da "a<<4", das andere Mal "4<<a". Oh, guck mal, auch bei "pow(2,5)" kommt etwas anderes heraus als bei pow "(5,2)". Und Wahnsinn, auch "5-2" ist etwas anderes als "2-5". Wir sind da einer ganz heißen Sache auf der Spur vielleicht können wir das jetzt am Wochenende ausgiebiger erforschen? Danke Stephan, das erklärt natürlich auch (1<<X) somit wird die 1 verschoben und zwar um die anzahl die in X angegeben ist. Vielen Dank! Martin schrieb: > Und Wahnsinn, auch "5-2" ist etwas anderes als "2-5". Du mußt das richtig schreiben: (+5) + (-2) == (-2) + (+5) Nicht Vorzeichen und Rechenoperation mischen. MfG Klaus Michi schrieb: > Danke Stephan, das erklärt natürlich auch > > (1<<X) somit wird die 1 verschoben und zwar um die anzahl die in X > angegeben ist. > Was macht verblüfft: Steht denn davon nichts in deinem C-Buch? Denn für a << b gibt es eine Besonderheit in Bezug auf die Datentypen im Gegensatz zu den meisten anderen Operatoren. Aber auch das sollte in einem vernünftigen C-Buch beschrieben sein. Klaus schrieb: > Nicht Vorzeichen und Rechenoperation mischen. Ich hatte kein Vorzeichen verwendet. Trinkst du? So früh am Morgen? Michi schrieb: > Worin liegt bei beiden der unterschied? Der Unterschied liegt im unterschiedlichen Wert der Operanden. Und warum das einen Unterschied macht? Der Shift-Operator nicht kommutativ ist. Martin schrieb: > Trinkst du? So früh am Morgen? Ja, Kaffee Martin schrieb: > Ich hatte kein Vorzeichen verwendet. Oh, doch. Bei der 5 hast du die Konvention verwendet, daß man am Anfang einer Operation das positive Vorzeichen weglassen kann. Und bei der 2 gilt, daß man beim Aufeinderfolgen von + und - das + weglassen kann. a = 5; b = -2; a + b == b + a; siehe auch Kommutativgesetz. Martin schrieb: > Oh, guck mal, auch bei "pow(2,5)" kommt etwas anderes heraus als bei pow > "(5,2)". Die Potenzierung ist nicht kommutativ. MfG Klaus Klaus schrieb: >> Ich hatte kein Vorzeichen verwendet. > > Oh, doch. Bei der 5 hast du die Konvention verwendet, daß man am Anfang > einer Operation das positive Vorzeichen weglassen kann. Und bei der 2 > gilt, daß man beim Aufeinderfolgen von + und - das + weglassen kann. Ebenso bei der zweiten Zahl. > a = 5; > b = -2; Nein. +2. (+5) - (+2) Aber netter Taschenspielertrick. >> Oh, guck mal, auch bei "pow(2,5)" kommt etwas anderes heraus als bei pow >> "(5,2)". > > Die Potenzierung ist nicht kommutativ. Eben. Wie die allermeisten Operationen nicht. Und genau das schien der OP nicht zu begreifen. Martin schrieb: > Aber netter Taschenspielertrick. Mathematisch gibt es eigentlich keine Subtraktion, sondern nur die Addition mit vorzeichenbehafteten Zahlen. Das macht das Leben viel leichter, denn die Addition ist kommutativ, Gleichungen lassen sich leichter umstellen. Martin schrieb: > Und genau das schien der > OP nicht zu begreifen. Ack MfG Klaus Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
|
|