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
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.