Formel für Binär in Normale Zahlen und umgekehrt?
-
Hallo Laute,
Ich wollte gern mal wissen wie man normale Zahlen (z.B. 6 oder 2,25) in Binärzahlen umwandelt und umgekehrt, die Formel dafür.
-
Für ganze Zahlen ist folgende Methode ganz gut geeignet.
1. Schreib die aktuelle Zahl unter die schon geschriebenen.
2. Ist die Zahl 1, gehe zu fünftens.
3. Halbier die Zahl (abrunden).
4. Gehe zu erstens.
5. Schreib neben alle ungeraden Zahlen eine 1, neben alle geraden eine 0.Dann steht die entsprechende Binärzahl da (von unten nach oben gelesen).
Beispiel:
20 0 10 0 5 1 2 0 1 1
Also ist
Brüche kannst du nun auch umwandeln. Einfach als p/q hinschreiben, p und q getrennt umwandeln und dann schriftlich dividieren, wie man es in der Grundschule gelernt hat (es gilt halt nur 1+1=10).
-
Damit ist ja schonmal gesagt, wie man ganze Zahlen umwandelt.
Dann zeig ich mal noch, wie man Zahlen der Form 0, irgendwas umwandelt:Und zwar am Beispiel 0,25:
0,25 * 2 = 0,5 => 0 (Zahl vor dem Komma)
0,5 * 2 = 1,0 => 1 (Zahl vor dem Komma)Zahlen vor dem Komma entfernt man nach jedem Schritt, aus 1,5 wird also für den nächsten Schritt 0,5.
Die Zahlen vor dem Komma sind dann gerade die binären Nachkommastellen (von oben nach unten).
Ergebnis also 0,01So, nachdem wir jetzt ganze Zahlen und 0, ...-Zahlen umwandeln können klappt's mit allen:
2,25 hat als Entwicklung für 2: 10. Nachkommaentwicklung ist 0,01. Zusammen 10,01.
MfG Jester
-
Vom 2er ins 10er System:
1101 binär ist dezimal 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 8 + 4 + 0 + 1 = 13
Vom 10er ins 2er System:
Für positive Ganzzahlen
6 : 2 = 3 R 0
3 : 2 = 1 R 1
1 : 2 = 0 R 1Reste von unten nach oben gelesen: 110
Für negative Ganzzahlen verwendet man üblicherwiese das Zweierkomplement.
Bei Gleitkommazahlen werden auch die negativen Potenzen einer Basis berücksichtigt.
Also ließe sich 2.25 darstellen als 1*2^1 + 0*2^0 + 0*2^-1 + 1*2^-2 also binär 10.01Gespeichert wird das dann normalerweise als Mantissendarstellung, wobei die Mantisse normalisiert ist. Im Zweiersystem ist die erste Ziffer vor dem Komma daher immer eine eins und wird weggelassen. Der Exponent wird dann abhängig vom Datentyp mit einer Verschiebung (Bias) gespeichert.
Bei Float (4 Byte = 32 Bit) stehen dann Bit 1 für das Vorzeichen, die nächsten 8 Bit für den Exponenten und die restlichen 23 für die Mantisse zur Verfügung.
Bei Double (8 Byte = 64 Bit) dann Bit 1 für Vorzeichen, die nächsten 11 für den Exponenten und die restlichen 52 für die Mantisse.
Bezeichne E die Anzahl der Bits für den Exponenten, dann ist die Verschiebung (2^E)/2 - 1. Also bei Float (E=8) ergibt sich Bias = 127, für Double (E=11) Bias = 1023.Mal zwei Bespiele, wie ne Dezimalzahl als Float gespeichert wird:
Gleitkommazahl im Dezimalsystem: 0.75
nach Basiswechsel im Binärsystem: 0.11
nach Normalisierung: 1.1 e -1Vorzeichen positiv, also V = 0 (1 Bit)
Exponent mit Bias: -1 + 127 = 126 --> E = 0111 1110 (8 Bit)
Mantisse ohne führende 1: .1 --> M = 10000000000000000000000 (23 Bit)Gesamt einfach V, E und M aneinandergereiht: 00111111010000000000000000000000
Gleitkommazahl im Dezimalsystem: 2.25
nach Basiswechsel im Binärsystem: 10.01
nach Normalisierung: 1.001 e 1Vorzeichen positiv, also V = 0 (1 Bit)
Exponent mit Bias: 1 + 127 = 128 --> E = 1000 0000 (8 Bit)
Mantisse ohne führende 1: .001 --> M = 00100000000000000000000 (23 Bit)Gesamt: 01000000000100000000000000000000
-
kwoTx schrieb:
Für negative Ganzzahlen verwendet man üblicherwiese das Zweierkomplement.
Ich dachte, man schreibt einfach ein Minus vor die Zahl, da wir uns hier im Mathematik-Forum befinden und der OP es allgemein wissen wollte.
-
cd9000 schrieb:
kwoTx schrieb:
Für negative Ganzzahlen verwendet man üblicherwiese das Zweierkomplement.
Ich dachte, man schreibt einfach ein Minus vor die Zahl, da wir uns hier im Mathematik-Forum befinden und der OP es allgemein wissen wollte.
Ist mir auch recht
-
Danke für die Antworten!
Wen ich das Richtig verstanden habe muss man 6 so umwandeln:
6 = 0 3 = 1 1 = 1
Also zu 110 werden.
Aber das zurückwandeln versteh ich irgentwie nicht so ganz , den wen man eine Binär Zahl hat (z.B. 01001) könnte das ja nicht nur eine Dazimalzahl sein , wie kommt man auf das richtige Ergebniss?
-
Doch, es gibt nur genau eine Möglichkeit.
Du liest die Zahl von hinten nach vorne. Die hinterste Stelle hat den Wert 1, die nächste den Wert 2, dann 4, 8, 16... usw. also 2^0, 2^1, 2^2, etc.
Dein Beispiel 0 1 0 0 1
von hinten angefangen
1 * 2^0 = 1
0 * 2^1 = 0
0 * 2^2 = 0
1 * 2^3 = 8
0 * 2^4 = 0
Also hast insgesamt 9.MfG,
Sammy
-
Naja, ich glaube er war verwirrt wegen der Gleitkommadarstellung. Da sieht man ja nicht so ohne weiteres was gemeint ist. Man muß sich schon auf irgendwas einigen. Wenn ich Dir im Rechner 32Bit hinknalle, dann weißte auch nicht was das ist. int? unsigned int? ODer doch ein float? Da muß man dann das Speicherformat (also den Datentyp) kennen.
Wenn man aber mal auf die Gleitkommadarstellung verzichtet, die hier auch glaube ich garnicht gefragt war, dann erkennt man den Nachkommateil wie immer ganz einfach am Komma. Auch führende 0en sind nur darauf zurückzuführen, daß man beim Speichern im Rechner halt ne gewisse Menge Bits voll machen muß. Mathematisch sind die völlig unnötig. Man schreibt ja auch nicht 0190 für 190.
-
Danke Sammymaus , ich denke ich habs verstanden
Jetzt noch eine Frage die warscheinlich nicht ins Matte-Forum passt aber ich stell sie trotzdem:
Wie lassen sich eigentlich Zeichen in Binärzahlen umwandeln? Oder kan man das garnicht?
-
Xclear schrieb:
Jetzt noch eine Frage die warscheinlich nicht ins Matte-Forum passt aber ich stell sie trotzdem:
Wie lassen sich eigentlich Zeichen in Binärzahlen umwandeln? Oder kan man das garnicht?Du nimmst ihre Repräsentation als ASCII- oder UNICODE-Zeichen (das wäre dann wieder eine Zahl zwischen 0 und 255 bzw. 0 und 65535) und rechnest diese nach Binär um.