Kodierung und Dekodierung von Zahlensystemen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Kodierung und Dekodierung von Zahlensystemen

      Hallo Leute,
      ich mache ja eine Ausbildung zum Fachinformatiker, deswegen kann ich euch teilweise qualitativ hochwertige Tutorials zu solchen Geschichten bieten :)

      Also, heute zeige ich euch wie man die einzelnen Zahlensysteme umrechnet und wie sie eigentlich funktionieren.

      Welche Zahlensysteme behandele ich?
      • Dezimal
      • Dual
      • Hexadezimal
      Zuerst aber erstmal eine kurze Einleitung

      1. Dezimalsystem/Dual/Hexadezimal
      Das Dezimalsystem ist wohl das einfachste und allen bekannt :) Es ist das "normale" Zahlensystem also 0 1 2 3 ...
      Das Dualsystem ist auch relativ einfach. Es gibt nur 1 und 0(Also An und Aus) z.B. 1 = 0001
      Das Hexadezimalesystem wird unter uns Hackern auch sehr bekannt sein es setzt sich aus den Ziffern 0-9 und den Buchstaben A-F zusammen. Die Höchste einstellige Zahl im Hexadezimalensystem ist 15(F)

      2. Dual <-> Dezimal
      Vorweg sollte man wissen das die Dualen Zahlen von Rechts nach Links geschrieben werden.
      Die einzelnen stellen bei der Dualzahl haben verschiedene wertigkeiten, diese fängt mit 0 von Rechts an und wird jede weitere Stelle nach Links +1 und nach rechts -1.
      Die Formel für die umrechnung ist: (Ziffer * 2 ^ Stellenwert) + (Nächste_Ziffer * 2 ^ Stellenwert) + (Nächste_Ziffer * 2 ^ Stellenwert) + ... = Dezimalzahl

      Achtung: x * y^0 ist NICHT 0 sondern 1!

      Beispiel Dual in Dezimal:

      Brainfuck-Quellcode

      1. Wertigkeit
      2. 8 4 2 1
      3. ---------------------------------------------------------------------
      4. Dezimal | Dual
      5. 0 | 0 0 0 0 | 0 + 0 + 0 + 0 = 0
      6. 1 | 0 0 0 1 | 0 + 0 + 0 + 1 = 1
      7. 2 | 0 0 1 0 | 0 + 0 + 2 + 0 = 2
      8. 3 | 0 0 1 1 | 0 + 0 + 2 + 1 = 3
      9. 4 | 0 1 0 0 | 0 + 4 + 0 + 0 = 4
      10. 5 | 0 1 0 1 | 0 + 4 + 0 + 1 = 5
      11. 6 | 0 1 1 0 | 0 + 4 + 2 + 0 = 6
      12. 7 | 0 1 1 1 | 0 + 4 + 2 + 1 = 7
      13. 8 | 1 0 0 0 | 8 + 0 + 2 + 0 = 8
      14. 9 | 1 0 0 1 | 8 + 0 + 0 + 1 = 9
      15. 10 | 1 0 1 0 | 8 + 0 + 2 + 0 = 10
      16. 11 | 1 0 1 1 | 8 + 0 + 2 + 1 = 11
      17. 12 | 1 1 0 0 | 8 + 4 + 0 + 0 = 12
      18. 13 | 1 1 0 1 | 8 + 4 + 0 + 1 = 13
      19. 14 | 1 1 1 0 | 8 + 4 + 2 + 0 = 14
      20. 15 | 1 1 1 1 | 8 + 4 + 2 + 1 = 15
      21. Nehmen wir die Zahl 1011
      22. Stellenwert 3 2 1 0
      23. Zahl 1 0 1 1
      24. Daraus ergibt sich:
      25. 1 * 2^3 = 8
      26. 0 * 2^2 = 0
      27. 1 * 2^1 = 2
      28. 1 * 2^0 = 1
      29. 9+0+1+1 = 11
      30. und wie wir oben sehen ist 1011 = 11 :)
      Alles anzeigen


      Verstanden?^^

      Falls du dich jetzt fragst wie du 16 berechnest, wir fügen einfach vorne die doppelte zahl von der voherigen zahl ein, in diesem Fall 16:

      Brainfuck-Quellcode

      1. Wertigkeit
      2. 16 8 4 2 1
      3. -----------------------------------------------
      4. Dezimal | Dual
      5. 0 | 0 0 0 0 0 | 0 + 0 + 0 + 0 + 0 = 0
      6. 1 | 0 0 0 0 1 | 0 + 0 + 0 + 0 + 1 = 1
      7. [...] | |
      8. 14 | 0 1 1 1 0 | 0 + 8 + 4 + 2 + 0 = 14
      9. 15 | 0 1 1 1 1 | 0 + 8 + 4 + 2 + 1 = 15
      10. 16 | 1 0 0 0 0 | 16 + 0 + 0 + 0 + 0 = 16


      Die Umrechnung von von Dezimal in Dual ist auch einfach, ich erkläre jetzt das restwertverfahren.
      Dazu wird die Dezimalzahl bzw. der rest immer durch 2 geteilt. wenn ein Rest bei der Division bleibt, wird eine 1 geschrieben, ansonsten 0.

      Beispiel:

      Quellcode

      1. 1581 : 2 = 790 Rest 5 -> 1 /^\ L
      2. 790 : 2 = 395 Rest 0 -> 0 / | \ E
      3. 395 : 2 = 197 Rest 5 -> 1 | S
      4. 197 : 2 = 98 Rest 5 -> 1 | E
      5. 98 : 2 = 49 Rest 0 -> 0 | R
      6. 49 : 2 = 24 Rest 5 -> 1 | I
      7. 24 : 2 = 12 Rest 0 -> 0 | C
      8. 12 : 2 = 6 Rest 0 -> 0 | H
      9. 6 : 2 = 3 Rest 0 -> 0 | T
      10. 3 : 2 = 1 Rest 5 -> 1 | U
      11. 1 : 2 = 0 Rest 5 -> 1 | N
      12. G
      13. Also 1581d = 10110100011b
      Alles anzeigen


      Einfach oder?^^


      3. Hexadezimal <-> Dezimal
      Das Hexadezimale Zahlensystem besteht aus 16 verschiedenen Zeichen und sollte unter uns Hackern sehr bekannt sein^^:

      Quellcode

      1. D = H
      2. ------
      3. 0 = 0
      4. 1 = 1
      5. 2 = 2
      6. 3 = 3
      7. 4 = 4
      8. 5 = 5
      9. 6 = 6
      10. 7 = 7
      11. 8 = 8
      12. 9 = 9
      13. 10 = A
      14. 11 = B
      15. 12 = C
      16. 13 = D
      17. 14 = E
      18. 15 = F
      19. 16 = 10
      Alles anzeigen


      Dezimal zu Hex:
      Die Formel für die Berechnung der Teilziffern lautet:

      Quellcode

      1. Basiszahl(BZd) : 16 = Ergebnis_Ganzzahl(E_Gd) REST (BZd - (E_Gd * 16)) = Teil_Ergebnis(T_Ed) = Teil_Ergebnis(T_Eh)
      2. ____________________|
      3. \|/
      4. Basiszahl(BZd) : 16 = Ergebnis_Ganzzahl(E_Gd) REST (BZd - (E_Gd * 16)) = Teil_Ergebnis(T_Ed) = Teil_Ergebnis(T_Eh)
      5. Beispiel:
      6. Beispielzahl: 5115d
      7. 5115 : 16 = 319 REST (5115 - (319 * 16)) = 11 = B ^
      8. 319 : 16 = 19 REST ( 319 - ( 19 * 16)) = 15 = F /|\
      9. 19 : 16 = 1 REST ( 19 - ( 1 * 16)) = 3 = 3 | LESE RICHTUNG
      10. 1 : 16 = 0 REST ( 1 - ( 0 * 16)) = 1 = 1 |
      11. 5115d = 13FBh
      Alles anzeigen

      Die Hexadezimalen zahlen werden nun von unten nach oben aneinander gereiht und das ist dann das Hex ergebnis.

      Hex zu Dezimal:
      Die umrechnung von Hex nach Dezimal ist auch recht einfach. Die Formel hierzu lautet(fast wie bei der Dual2Dezimal):
      (Ziffer * 16 ^ Stellenwert) + (Nächste_Ziffer * 16 ^ Stellenwert) + (Nächste_Ziffer * 16 ^ Stellenwert) + ... = Dezimalzahl

      Quellcode

      1. Beispiel hexzahl: 13FBh
      2. [1] 1 * 16^3 = 4096
      3. [3] 3 * 16^2 = 768
      4. [F] 15 * 16^1 = 240
      5. [B] 11 * 16^0 = 11
      6. 4096+768+240+11 = 5115d


      So, ich hoffe ich habe es verständlich genug geschrieben und nichts vergessen^^ bei fragen/anregungen könnt ihr mir gerne schreiben

      Gruß,
      Julian
      Ich bin nicht vergesslich, in meinem Hirn werden nur Pointer zu den Leuten angelegt, auf die ich dann nur zurück greifen muss um die Information zu erlangen :)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Devtronic ()

    • Schönes Tutorial, auch wenn es "bloß" die absoluten Grundlagen behandelt. Hilfreich ist es bestimmt :).
      Was mir persönlich fehlt: Das Verständnis, dass alle Positionssysteme gleich funktionieren. Wenn man einmal verstanden hat, wie unser Dezimal-System funktioniert, versteht man auch alle anderen Positionssysteme.

      Lg, Alen
      MfG, Alen
    • Ganz ordentlich Alles in Allem, jedoch hast du einen kleinen Fehler eingebracht:

      Devtronic schrieb:

      Daraus ergibt sich:

      1 * 3^2 = 9
      0 * 2^2 = 0
      1 * 1^2 = 1
      1 * 0^2 = 1

      9+0+1+1 = 11

      und wie wir oben sehen ist 1011 = 11 :)


      Zunächst einmal hast du hier 2 Fehler gemacht:
      • Du hast hier die Potenz falsch erstellt, es müsste 2^3, 2^2, 2^1, und 2^0 heißen, also 8, 4, 2, und 1.
      • Als zweites: 1 * 0^2 = 1 * 0 = 0


      Aber wie gesagt, einfach ausbessern und nicht allzu Ernst nehmen,
      das ist wirklich ordentlich erklärt.

      Kleine Idee:
      Wie wärs damit, wenn du noch einmal grundsätzlich die Idee hinter dem Hin- und Herrechnen erklärst,
      vonwegen [Wert] * [Anzahl der Zustände] ^ [Stelle], und das mit dem Rest ;)

      mfg,
      haefele
    • mist, ist mir doch ein kleiner fehler reingekommen... hehe,
      aber 1 * 2^0 ist = 1 Google

      haefele schrieb:


      Kleine Idee:
      Wie wärs damit, wenn du noch einmal grundsätzlich die Idee hinter dem Hin- und Herrechnen erklärst,
      vonwegen [Wert] * [Anzahl der Zustände] ^ [Stelle], und das mit dem Rest ;)


      Jup, könnt ich noch nachträglich schreiben

      Danke für das Lob :)

      Gruß,
      Julian
      Ich bin nicht vergesslich, in meinem Hirn werden nur Pointer zu den Leuten angelegt, auf die ich dann nur zurück greifen muss um die Information zu erlangen :)