Oktal direkt in Hexadezimal umrechnen

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Von Oktal ins Hexadezimal.

Zum Beispiel (71257305)oct

Hexadezimal rechnen.

Wir rechnen hexadezimal von links nach rechts.

Beginne mit der 7 und verdoppel dreimal in Hexadezimal.

0xE

0x1C

0x38

nächste Ziffer ist 1

0x38+0x1=0x39

Ergebnis dreimal in Hexadezimal verdoppeln.

0x72

0xE4

0x1C8

nächste Ziffer ist 2

0x1C8+0x2=0x1CA

Ergebnis dreimal in Hexadezimal verdoppeln.

0x394

0x728

0xE50

nächste Ziffer ist 5

0xE50+0x5=0xE55

Ergebnis dreimal in Hexadezimal verdoppeln.

0x1CAA

0x3954

0x72A8

nächste Ziffer ist 7

0x72A8+0x7=0x72AF

Ergebnis dreimal in Hexadezimal verdoppeln,

0xE55E

0xCABC

0x39578

nächste Ziffer ist 3 0x39578+0x3=0x3957B Ergebnis dreimal in Hexadezimal verdoppeln.

0x72AF6

0xE55EC

0x1CABD8

nächste Ziffer ist 0

0x1CABD8+0x0=0x1CABD8

Ergebnis dreimal in Hexadezimal verdoppeln.

0x3957B0

0x72AF60

0xE55EC0

letzte Ziffer ist 5

0xE55EC0+0x5=0xE55EC5

(71257305)oct = 0xE55EC5 .

das geht genauso, wie man es auch im dezimalsystem macht.

man macht häufig folgendes:

sei 10010 eine zahl im dualsystem. dann zählen wir 0 * 1 + 1 * 2 + 0 * 4 + 0 * 8 + 1 * 16 = 18

was wir dabei gemacht haben: wir haben, weil wir eben aus gewohnheit im dezimalsystem rechnen die zwischenergebnisse (die einzelnen summanden) bereits im 10er system angegeben bevor wir zusammenzählen.

wollen wir nun das in das oktale system umwandeln rechnen wir wieder im 10er-system:

8^0 = 1, 8^1=0, 8^8=64 , und 64 ist größer als 18, d.h.: wir kümmern uns zuerst um die "8er-stelle" (analog zu 10er-stelle im dezimalsystem). wir rechnen nun 8 * 1 = 8, 8 * 2 = 16, 8 * 3 = 24, und 24 ist bereits zu groß, also haben wir an der 8er-stelle nur eine ziffer 2. dann fehlen uns noch "2" um auf 18 zu kommen. das geht mit einer "2" an der 1er-stelle. => die zahl lautet 22.

all diese rechnungen haben wir aber bereits in einem zahlensystem durchgeführt, nämlich dem 10er-system. das geht aber auch ohne. sowohl das potenzieren als auch das malnehmen lassen sich per definition auf summation zurückführen. und beim addieren von summen addiert man einfach die "ziffern" und guckt, ob man über die grenzen des zahlensystem hinaus-schießt, und damit einen übertrag verzeichnen muss.

beispiel: 7 + 7 = 4 und "1 gemerkt", welches an die nächsthöhere stelle wandert, d.h.: 14

das geht nun auch in allen anderen zahlensystemen. selbes beispiel, also 10010 in dual direkt in oktal:

(dabei gibt es mehrere algorithmen, ich versuche den obigen so genau wie möglich zu kopieren) ich ziehe immer größer werdende 2er-potenzen als dualzahlen von 10010 ab, bis ich gerade noch über der 0 bin. dabei weiß ich aber nicht, ob es diese zahlen in ihrer ziffern-darstellung auch im 8er-system gibt. also spalte ich die zahl in 1er auf. 1 = 1, 2= 1 + 1, 4 = 1+1+1+1 usw.... schnell wird klar, dass der algorithmus nur sinn macht, wenn wir von vornherein nur so lange 1er abziehen und im 8er-system aufaddieren, bis die dualzahl verschwunden ist. schließlich ist ein zahlensystem nichts anderes als eine art und weise die summen von 1+1+1+1...usw anders darzustellen. alle systeme haben eine 1er-stelle.

10010 - 1 = 10011 und 1 gemerkt zum abziehen der nächst-höheren stelle = 10001. im oktalsystem haben wir bereits eine 1. noch ein schritt: 10001 - 1 = 10000. im 8er-system sind wie nun bei 2 angelangt.

das ginge weitaus schneller, wenn wir nicht immer nur "1" abziehen. es ist also sehr sinnvoll zu probieren, ob man nicht auch mal 8 oder z.B.: 20 abziehen kann. z.B.: 8 im dualsystem gleich 1000. ziehe ich das mal ab: 10000 - 1000= 1000. nun muss ich zählen wie viele 1er ich dafür benötigte... das sind nunmal unabhängig davon in welchem system ich dies darstelle 8 mal die 1, oder besser gesagt 1+1+1+1+1+1+1+1. das sind und bleiben "8" in unserem dezimalsystem oder z.B. 20 im 4er-system. die darstellungsart ist egal. es sind "1+1+1+1+1+1+1+1" = zahl vom wert "8" im dezimalsystem. im oktalsystem war ich erst bei 2. nun zähle ich 8mal weiter. und lande bei 3,4,5,6,7,0,1,2, also 2 und "1 gemerkt", also sind wir bei 12. leicht sieht man, dass wir nochmal "8" abziehen müssen, also nochmal "8" im oktalsystem dazu zählen. 3,4,5,6,7,0,1,2 und wieder 1 gemerkt. damit erhalten wir 22.

man rechnet also eigentlich nu mit "plus 1" bzw. "minus 1". man kann aber auch gleich mehrere 1er auf einmal abziehen um alles zu beschleunigen. dafür müssen wir die "anzahl" an 1er aber in worte fassen. dabei müssen wir eine wahl treffen, nämlich "welches system?". da kommt für uns nurdas dezimalsystem in frage, weil wir ständig darin rechnen. hätten wir gelernt im 2er-system zu rechnen, so würden wir nicht erst ins dezimal-system umrechnen.

Schon wenn Du das Wort "rechnen" benutzt, hast Du Dich ja auf ein System festgelegt (auch Dein Gehirn ist Hardware)! Da es keinen Rechner gibt, der rein "oktal" rechnet, gibt es auch keine "direkte" Wandlung. Am besten versteht man es, wenn man mit Computersprachen arbeitet, da man:
- schon bei der Ein- und Ausgabe den neutralen Typ "String" verwenden muss
- immer gezwungen wird "typkompatibel" zu arbeiten
- bei mehr als den üblichen 15 (Dezimal-)Stellen gezwungen wird, sich "echte Gedanken für sauberen Algorithmus" zu machen
- leicht die Rechenzeit stoppen kann

Einige Compiler erlauben zwar die begrenzte direkte Eingabe basisfremder Zahlen (0xFF, $F1 usw.), ABER da kümmert sich der Compiler nur einmalig um die Wandlung.

Interessant wäre ABER die Frage:
a) Welches ist der schnellste Algorithmus in ASM (Maschinensprache), der kontinuierlich mindestens 64 stellige okt-Zahlen direkt nach Hex wandeln kann?!
Da gibt es hoch optimierte Befehle wie "Shift Links/rechts" (Schieben aller BIN-Bits um x nach LINKS bedeutet mathematisch 2^x)...
Manchmal ist auch ein scheinbarer Umweg schneller, da einige Befehle weniger Taktzyklen brauchen als andere...

Nur wenn der Nutzen den Aufwand für eine neue Hardware rechtfertigen würde, wäre auch eine 1-Takt-Hardware denkbar... Dafür gibt es aber andere Foren wie FPGA, Mikrocontroller, Assembler...

b) Welches ist der einfachste Algorithmus für einen Menschen mit Papier & Bleistift?

Wenn Du mehr als die üblichen 15 Stellen online wandeln willst (denn bis dahin findet man im Netz hunderte Anfänger-Programme oder "Tools")
siehe http://www.lamprechts.de/gerd/php/RechnerMitUmkehrfunktion.php
Befehl FromBase2Base(x=Argument zum Wandeln, y=Quellbasis, z=Zielbasis)
(intern rechnet der immer nach Dezimal um, da Quell- & Zielbasis hier variabel sind)

viele Stellen von Basis 8 nach Basis 16 umrechnen - (Mathematik, binär, Zahlensysteme)

Wie Du im Bild siehst, werden aus 49 Zeichen später 37.
Da der Bruch 49/37 nicht teilbar ist (Periode 324), kann man sich auch nicht einzelne Zeichen herauspicken und direkt wandeln, sondern kommt um eine "Komplettwandlung" (Dreierbitgruppen in Viererbitgruppen also mindestens Binär) nicht herum!

0

Da das Umrechnen vom oktal- ins hexadezimalsystem nur eine Umordnung von Dreierbitgruppen in Viererbitgruppen erfordert, ist der Weg über das Binärsystem der Einfachste.

Ohne Wandlung ins dezimal- oder binärsystem geht es wahrscheinlich nicht.

Auch wenn die Frage schon vier Jahre alt ist: Man kann zwar theoretisch die Zahl ohne Umweg direkt vom Oktal ins Hex-System umrechnen, aber mit dem Umweg über das Binärsystem geht es doch wesentlich einfacher.

Ich nehm einfach mal die Zahl, die Hexbaumfall genommen hat. 71257305 im Oktalsystem. Für jede Ziffer im Oktalsystem gibt es eine dreistellige Zahlenkombination im Binärsystem. Das kann man ohne rechnen direkt übersetzen.

7   1   2   5   7   3   0   5
111 001 010 101 111 011 000 101

Die Binärziffern in Dreierblocks kann man jetzt so aufteilen, dass die Ziffern immer in Viererblocks stehen und kann sie dann wieder ohne rechnen ins Hex-System übersetzen.

1110 0101 0101 1110 1100 0101
E    5    5    E    C    5

Das geht meiner Meinung nach deutlich einfacher, als dieses ewig lange rumgerechne.