Forum: Mikrocontroller und Digitale Elektronik 8bit Zahl mit 4bit Nachkommastelle


von Nil (nilsnilss)


Lesenswert?

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

von Max H. (hartl192)


Lesenswert?

(Zahl*1000)/16 ergibt dir den Wert in Tausendstel.

von Falk B. (falk)


Lesenswert?


von Nil (nilsnilss)


Lesenswert?

Vielen Dank für die schnelle Antwort, jetzt klappt alles.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.