Ich hab ein kleines Problem, vielleicht steh ich auch nur auf dem Schlauch, aber ich komm jetzt seit paar Tagen einfach nicht weiter: Ich hab eine 8bit Zahl, die folgendermaßen "aufgebaut" ist (2^2 -> "zwei hoch zwei"): Wertigkeit 2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3 2^-4 Bit MSB 7 6 5 4 3 2 1 0 LSB Die oberen 4bit sind somit der Teil vor dem Komma und die hinteren 4 der Teil nach dem Komma. Mit den oberen 4 Bit hab ich kein Problem, 4 mal nach rechts schieben und der Käse ist gegessen. Aber wie bekomm ich aus den unteren 4 Bit die Nachkommastellen? Ich programmiere einen Atmega32 in C. Vielen Dank schonmal
Nils Friess schrieb: > Die oberen 4bit sind somit der Teil vor dem Komma und die hinteren 4 der > Teil nach dem Komma. Mit den oberen 4 Bit hab ich kein Problem, 4 mal > nach rechts schieben und der Käse ist gegessen. Aber wie bekomm ich aus > den unteren 4 Bit die Nachkommastellen? Man könnte es auch so sehen. Die 'Einheit' dieser Zahl ist daher 1/16-tel.
1 | D.h. 0000 0001 stellt die Zahl 1/16 oder 0.0625 dar |
2 | 0000 0010 2/16 0.125 |
3 | 0000 0011 3/16 0.1875 |
4 | .... |
5 | 0000 1111 15/16 0.9375 |
6 | |
7 | 0001 0000 1 + 0/16 1 |
8 | 0001 0001 1 + 1/16 1.0625 |
9 | 0001 0010 1 + 2/16 1.125 |
10 | ... |
Man könnte zb den 'Nachkommaanteil' mal 100 multiplizieren und dann durch 16 dividieren. denn
1 | 0000 0001 1 * 100 / 16 = 6 ( soll: 0.0625 ) |
2 | 0000 0010 2 * 100 / 16 = 12 ( soll: 0.125 ) |
3 | 0000 0011 3 * 100 / 16 = 18 ( soll: 0.1875 ) |
und erhält so die ersten beiden Nachkommastellen in dezimaler Schreibweise, die man dann bei einer Ausgabe hinter dem Kommapunkt ausgibt. Aber Achtung: Führende 0-en dürfen dann bei der Ausgabe nicht unterdrückt werden. 8.6 ist etwas anderes als 8.06
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.