Binär -> Hexadezimalsystem < Sonstiges < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 12:35 So 01.09.2019 | Autor: | volk |
Hallo,
ich bin gerade bei der Umwandlung einer Binärzahl (unsigned char 8 Bit) in eine Hexadezimalzahl über folgende Umwandlung nur mit Hilfe von Bit-Operationen gestolpert:
Die Zahl sei [mm] (72)_{10}=(1001000)_{2}
[/mm]
Die beiden Bits der Hexadezimalzahl wurden wie folgt bestimmt:
High-Bit : 1001000 >> 4 = [mm] (100)_{2}=(4)
[/mm]
Low-Bit: 1001000 & 1111 = [mm] (1000)_{2}=(8)
[/mm]
Das macht [mm] (48)_{16}
[/mm]
Meine Frage hierzu ist die folgende: das der Verschiebeoperator eine ganzzahlige Division darstellt, ist mir bewusst. Das der Und-Operator zur Modulo-Berechnung benutzt werden kann, allerdings nicht. Auch ist mir nicht bewusst, wieso [mm] (1111)_{2}=(15)_{10} [/mm] statt [mm] (10000)_{2}=(16)_{10} [/mm] benutzt wird.
Viele Grüße
volk
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:57 So 01.09.2019 | Autor: | chrisno |
mit dem und-Operator werden die führenden Bits beseitigt und die letzten Bits erhalten.
Ich schreibe mal die Operation als & 00001111.
Jede Null im der Zeichenkette sorgt dafür, dass das Zeichen ignoriert wird, jede Eins dafür, dass das vorhandene Zeichen auch erhalten bleibt.
Bestimme das Ergebnis von
1001000
& 10000
Da kommt nichts brauchbares heraus. Hingegen
1001000
& 0001111
= 0001000
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 13:43 So 01.09.2019 | Autor: | volk |
Hallo chrisno,
vielen Dank für deine schnelle Antwort.
Dieses Verfahren funktioniert dann aber nur, so wie ich das sehe, wenn der Divisor eine Zweierpotenz ist, oder? Wie geht man in allen anderen Fällen vor?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:28 So 01.09.2019 | Autor: | chrisno |
Davon habe ich keine Ahnung.
Letzlich kann man immer den normalen Algorithmus, wie bei der schriftlichen Division durchführen.
|
|
|
|
|
Es geht dir ja darum, eine Binär- in eine Hexadezimal-Zahl umzuwandeln.
Nehmen wir zunächst ein anderes Beispiel: Du möchtest die Zahl [mm] N=(347)_{10}, [/mm] die, aber - sagen wir mal - im 3-er-System codiert ist, in seine Dezimalziffern (auch im Dreiersystem codiert) zerlegen. Dann könntest du das so programmieren:
Einerziffer a ermitteln durch a = N mod 10 = 7.
Nun ziehst du von N das a ab: [mm] N'=(340)_{10}
[/mm]
Dann dividierst du N' durch 10: N''= [mm] (34)_{10}
[/mm]
Zehnerziffer b=4 ermitteln, indem du nun mit N'' dasselbe machst wir oben mit N usw.
Dabei spielt es keine Rolle, ob die Zahl im 3-er-, 2-er-, 10-er- oder 16-er-System codiert ist. Du erhältst immer die so codierten Ziffern für das 10-er-System.
Der Unterschied zur Kombination Binär-Hexadezimal-System besteht aber nun in Folgendem:
Zunächst mal hat das Hexadezimalsystem nicht die 10 Ziffern 0 bis 9, sondern 0 bis 15, wobei man für 10-15 weitere Zeichen braucht und die Buchstaben A-F benutzt.
Nach [mm] F=(15)_{10} [/mm] kommt dann [mm] (10)_{16}=(16)_{10}.
[/mm]
Die Ziffern [mm] (0)_{16} [/mm] bis [mm] (F)_{16} [/mm] sehen aber im Binärsystem so aus: [mm] (0000)_{2} [/mm] bis [mm] (1111)_{2}. [/mm] Danach kommt im Hexadezimalsystem die [mm] (10)_{16} [/mm] = [mm] (10000)_{2} [/mm] im Binärsystem.
Somit entspricht die letzte Ziffer im Hexadezimalsystem genau dem Wert der letzten 4 Ziffern im Binärsystem!!!
Wie in obigem Rechenbeispiel gezeigt, ziehst du die nun von der bisherigen Zahl im Binärsystem ab, so dass die letzten 4 Ziffern alles Nullen werden. Dann Dividierst du durch 16, und das entspricht im Binärsystem genau dem Rechtsshiften um 4 Stellen. (Da im Computer beim Rechtsshiften die letzten Stellen einfach wegfallen, kannst du auf das Abziehen und Dividieren verzichten, und genau das macht die Sache so effektiv!)
Fazit: Weil [mm] 2^4=16 [/mm] ist, entsprechen die vierer-Zahlenblöcke im Binärsystem - von hinten eingeteilt - genau den Ziffern im Hexadezimalsystem.
Würdest du Ziffern im 32-er-System bilden wollen, müsstest du die Binärzahl von hinten nur immer in 5-er-Blöcke zerlegen. Zahlen des 3-er-Systems, immer von hinten in Dreierblöcke zerlegt, würden die ziffern des 27-er-Systems ergeben usw.
Wolltest du aber Binärzahlen im 7-er-System darstellen, könntest du die Ziffern nicht mehr durch Blockbildung bekommen!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:53 Sa 14.09.2019 | Autor: | vlado77 |
Bei Digitalspeicherung, wo die Reihen von 8 Bits in die Bytes gruppiert werden, kann die ganze Zahl auch durch eine Reihe der Zeichen einer 256-Element-Menge dargestellt werden, deren Elemente die Ziffern der Werte 0 bis 255 repräsentieren und schriftlich durch alphanumerische, Interpunktions-, Kontroll-, Geldzeichen, nichtenglische Buchstaben oder andere Zeichen unterschieden werden.
Dabei schreibt man z. B. die 65-Wert-Ziffer mit das große A, das kleine a steht für die 97-Wert-Ziffer, die B stehen für die 66- und 98-Wert-Ziffern, das Zeichen @ für die 64-Wert-Ziffer, die geschriebene Ziffern 0 bis 9 für die Werte 48 bis 57, das große französische Ç für 128, das kleine deutsche ü für 129 usw.
Beispiele:
a) CD = C ⋅ 256 + D = 67 ⋅ 256 + 68 = 17220
b) A0Ça =
A ⋅ 256⋅256⋅256 + 0 ⋅ 256⋅256 + Ç ⋅ 256 + a =
65 ⋅ 256⋅256⋅256 + 48 ⋅ 256⋅256 + 128 ⋅ 256 + 97 =
1093697633
|
|
|
|