Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 20. Jun 2005 16:11 Titel: Schiebeoperationen |
|
|
Ich hab da mal ne kleine Frage zu den Schiebeoperationen. Hab soeben festgestellt, wenn ich zum Beispiel ne Zahl mit Datentyp int um 32 oder mehr Bit nach links verschiebe, dann müsst ja rein vom logischen 0 rauskommen. Tuts aber nicht...
Kann es sein, dass der Compiler bei solchen Operationen erst mal Modulo 32 (oder entsprechende Werte bei anderen Datentypen) auf den zweiten Operanten anwendet? (Sprich dass x <<= 33 dann zum Beispiel genauso wie x <<= 1 behandelt werden würde) Hab n bisschen rumprobiert und das würd eigentlich hinhauen...
Stimmt das so oder passiert da noch ganz was anderes? Und wenn das stimmt, dann stellt sich die Frage: Warum macht der das so? Ist das wirklich sinnvoll? Denn so richtig logisch ist das System irgendwie nicht, find ich... _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
|
Tobias
Anmeldungsdatum: 15.02.2005 Beiträge: 149
|
Verfasst am: 20. Jun 2005 21:30 Titel: |
|
|
Jawoll. Java implementiert den binären Schiebeoperator modulo 32 (das bedeutet einfach, dass nur die ersten 5 Bits des zweiten Arguments berücksichtigt werden). [Bei 64Bit-Datentypen entsprechend modulo 64].
Ob das sinnvoll ist eine andere Frage. Bestimmt sinnvoller als mehr als 31mal zu schieben. |
|
Nach oben |
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 21. Jun 2005 01:27 Titel: |
|
|
Na ja, wie mans nimmt... Also wenn jemand mehr als 31 Bits weiterschiebt, dann würd ich mal sagen, da stimmt dann was nicht. So n Fehler is wohl schwieriger zu sehen, wenn da irgendwelche Fantasiewerte rauskommen als wenn das einfach mal schön 0 wird und dann gar nix mehr passt. _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
dachdecker2 Moderator
Anmeldungsdatum: 11.06.2005 Beiträge: 106 Wohnort: Maintal / Hessen
|
Verfasst am: 23. Jun 2005 15:09 Titel: |
|
|
Wenn man sich vorstellt, dass man viellecht aus Performancegründen die Multiplikation mit 2^n (mit -32<n<32) mit Links-/Rechtsschieben implementiert, und die Funktion mit n=-32 oder aufgerufen wird, ist es vielleicht nicht soo abwegig nullen zu erwarten. Und dann wird man von einem Gemisch aus 0en und 1en überrascht ... . Zumindest halte ich das Linksschieben für kritischer, weil dort der Wertab der ersten "runterfallenden" 1 völlig falsch ist. Beim rechtsschieben ist der Fehler maximal 0,5 LSB. _________________ In a world without walls and fences, who needs windows and gates? [Internet]
Gruß, dachdecker2 |
|
Nach oben |
|
|
|