Links/Rechtsverschiebung oder was stellt das dar?

Bitte aktiviere JavaScript!
Hi, ich möchte gerne die Musterlösung nachvollziehen. Nach meinen Recherchen wird ein logischer rechts-bzw linksshift verwendet der eine Verschiebung implizirt. Leider finde ich im Internet nur zusammenhänge zu binären Werten, deshalb kann ich absolut nicht nachvollziehen wie man hier vorgeht. Jemand eine Idee vlt?

lg
 

Anhänge

Moin,
ich überlege gerade, wo Dein Verständnisproblem liegt...

Alle Werte werden im Computer binär abgelegt, denn Computer kennen nur 0 und 1. Ist aber gar kein Problem, denn alle Zählen lassen sich ja Mathematisch in jedem System darstellen. Wir Menschen nutzen in der Regel das Dezimal-System und Computer halt das Binäre System.
Da sich Zählen so nur schlecht darstellen lassen, wurden die Zahlen in Blöcke gefasst:
So werden 4 Stellen (auch als Bits bezeichnet) zusammen gefasst. Mit 4 Stellen lassen sich im Binären System die Zahlen von 0 (0000) bis 15 (1111) Darstellen.
Diese 4 Bits möchte man mit einer Stelle darstellen, also braucht man ein System, welches 16 Werte pro Stelle kennt: Hexadezimal System. Das kennt die Ziffern 0-9 und A-F.

Nun wurden zwei 4er Blocks zusammen gefasst und als Byte bezeichnet. Hexadezimal sind das also 2 Stellen, so dass ein Byte von 0x00 - 0xFF geht. (Wenn wir Zahlen im Hexadezimal System schreiben, dann setzen wir ein 0x davor, damit ein Leser das erkennen kann!)

Ein int in Java besteht nun aus 4 Bytes, so dass sich die Werte 0x00000000 - 0xFFFFFFFF. Dabei bekommt Abe das erste bit eine besondere Funktion: das Vorzeichen.

Kommen wir nun auf die Shift Operatoren zu sprechen:
Dies nimmt sich den Wert immer als binäre Zahl (Computer halt, der kennt nur 1 und 0) und hier kannst Du Dir nun ein Förderband mit Fächern vorstellen. Und zwar genau so viele Fächer wie Werte. Nun können wir das Förderband bewegen. Wenn wir das Förderband um eine Stelle nach rechts bewegen, dann fällt das, was in dem ersten Fach war, raus und ist weg. Links haben wir aber dann ein leeres Fach. (>>1 Operation).
Nach Links genau das gleiche, nur eben, dass es nach links geht...

Das nutzen wir jetzt einmal für das Verständnis der Aufgabe:
13 (ich betrachte nur die ersten 4 Bits, wobei die Bits die Wertigkeiten haben: 8,4,2,1 und 13 = 8+4+1:
1101 .... Nun schieben wir das jeweils um eine Position nach rechts:
1. schieben: die erste 1 fällt runter: 0110 (6)
2. schieben. Die 0 fällt runter: 0011 (3)
3. schieben: Die 1 fällt runter: 0001 (1)

Wenn wir uns so ein Schieben ansehen, dann fällt uns auf, dass die Wertigkeit einer 1 sich immer halbiert. Die 1 mit der Wertigkeit 8 hat danach noch noch die Wertigkeit 4. Daher entspricht so ein Shift einer Division durch 2.

Das Ganze in die andre Richtung muss ich nun nicht mehr so ausführlich erläutern, oder?

Wichtig: Du hast zu >> und << nur Erläuterungen zu der Operation auf den Werten gefunden, denn das ist es nun einmal. Es ist keine logische Operation, die nur mit Wahr und Falsch arbeitet.
 
Und das ganze nochmal schön untereinander geschrieben ergibt dann:
Code:
bin    dez  Operation  
1101 | 13 | >> (entspricht ganzzahliger Division durch 2)
0110 |  6 | >> (entspricht ganzzahliger Division durch 2)
0011 |  3 | >> (entspricht ganzzahliger Division durch 2)
0001 |  1 | 

D.h. 13 >> 3 = [[[13 : 2] : 2] : 2] 
             = [13 : 2 : 2 : 2]
             = [13 : 2^3] 
             = [13 : 8] = 1
(mit [a] = kleinste ganze Zahl größer oder gleich a)

0001 |  1 | << (entspricht ganzzahliger Multiplikation mit 2)
0010 |  2 | << (entspricht ganzzahliger Multiplikation mit 2)
0100 |  4 | << (entspricht ganzzahliger Multiplikation mit 2)
1000 |  8 |

D.h. 1 << 3 = 1 * 2 * 2 * 2 = 1 * 2^3 = 8
 
Passende Stellenanzeigen aus deiner Region:

Oben