# shift und zahlensysteme



## lennero (26. Jan 2016)

hallo

den shift von dualzahlen verstehe ich aber wie funktioniert das ganze bei oktal oder hexadezimalzahlen ?

ich habe zb die hexadezimalzahl 8000 diese soll um 1 stelle nach links verschoben werden-
hätte ich dann nicht 0000 ? geht sowas überhaupt oder muss ich zuerst ins dualsystem wechseln um den shift durchzuführen ?

wäre echt nett wenn mir jemand helfen könnte

gruß


----------



## Joose (26. Jan 2016)

Shiften funktioniert nur auf der Binären Ebene, heißt ja auch bitweise verschieben 
https://de.wikipedia.org/wiki/Bitweiser_Operator#Bitweise_Verschiebungen


----------



## Meniskusschaden (26. Jan 2016)

@lennero: Du müsstest vielleicht genauer sagen, was du eigentlich bezweckst. Wie Joose schon geschrieben hat, gibt es in Java nur für die bitweise Verschiebung einen Operator. Aber generell kann man natürlich in jedem Zahlensystem um eine Stelle nach links verschieben, indem man mit der "10" des jeweiligen Zahlensystems multipliziert, hier also mit der dezimalen 8 bzw. 16. Wenn links keine Stellen mehr übrig sind, geht aber etwas verloren, so daß das Ergebnis nicht mehr einer Multiplikation mit "10" entspricht.


----------



## lennero (26. Jan 2016)

also muss ich die zahlen erst ins binärsystem umwandeln, verschieben und dann wieder als hexadezimalzahl aufschreiben ?

ich hatte einige aufgaben zum berechnen und eine davon lautete : Führen sie für die folgenden Bytes/Wörter die angegebenen shifts durch.

0x8000 << 1
0xF0 >> 4


----------



## InfectedBytes (26. Jan 2016)

kleiner tipp: Eine einzelne Hexadezimal Ziffer wird durch 4 Bit repräsentiert. 
Eine Verschiebung um 4 bit führt dementsprechend dazu, dass die Hexadezimalzahl um eine Position verschoben wird:
0xF0 >> 4 == 0xF


----------



## Meniskusschaden (26. Jan 2016)

@lennero: Dann hattest du mit deiner Überlegung im ersten Post sicherlich recht. Falls die Aufgabe so gemeint ist, dass nur 16 Bit zur Verfügung stehen, kommt es zu einem Überlauf und das Ergebnis ist 0.

Folgendes ist in dem Zusammenhang vielleicht noch ganz interesant: eine links-Verschiebung um ein Bit entspricht ja der Multiplikation mit 2. Wenn man in Java den Wert 1 in einer short-Variablen speichert (also 16Bit) und wiederholt einstellige links-shifts damit durchführt bekommt man folgende Ergebnisse:
1, 2, 4, ..., 4096, 8192, 16384, -32768, 0
Weil Java keine vorzeichenlosen Ganzzahlen kennt, wird ein Bit für das Vorzeichen benötigt, so daß es bereits eine Iteration vor dem eigentlichen Überlauf zu einem möglicherweise unerwarteten Ergebnis kommt.


----------

