8bit Zahl mit 4bit Nachkommastelle

Gast #3634583
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
#3634604
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren