Forum: Mikrocontroller und Digitale Elektronik Shiften aber wie?


von Dominik B. (dominik123)


Lesenswert?

Hallo zusammen,
ich habe eine Frage zum Schiften der Bits.
Arbeite mit dem AVR Studio und einem ATmega162.
Wenn ich mir zum Beispiel eine Variable anlege von Typ "long"
und dieser Variable eine Zahl zuweise mit einer Kommerstelle.

long gross = 12.7;

Dann diesen wert auf einem Display ausgeben lasse.
Ist das Problem das die Ganzzahl sich darstellen lässt aber die Zahl 
nach der Kommerstelle nicht. Wie muss ich die bits Shiften das ich nur 
den Bereich nach der Kommerstelle in einen Integer Wert schreiben kann 
oder ist das ein ganzfalscher Ansatz?

int klein;

klein = (int)gross << 8;



Gruß und danke im vor raus ^^
Dominik

von crazy horse (Gast)


Lesenswert?

dafür gibts den Datentyp float...

von Dominik B. (dominik123)


Lesenswert?

Hi, ich kann aber nur "Integer" Zahlen am Display ausgeben wie 
konvertiere ich denn dann so was???

von Frank N. (arm-fan)


Lesenswert?

12,7 nicht schieben sondern mit 10 erweitern -> 127

127 kannst du wieder ausgeben, mußt nur noch das KOMMA richtig setzen.

von Gast (Gast)


Lesenswert?

Du hast garantiert nicht in der log-Variaben 12,7 gespeichert.

von Dominik B. (dominik123)


Lesenswert?

Wie ist es Möglich die Stellen hinter dem Kommer bei einer Float 
Variable in eine Integer variable zu bekommen???
Float kann ich nicht Shiften oder Undieren musste ich leider 
feststellen.

  float temporary;  // Bsp: Wert 12,7

  int time;

  int time2;

  long temporary2;

  /*****************************/

  time = (int)temporary;//gibt die Zahlen vor dem "," aus. Geht auch ^^

  temporary2 = (long)temporary;

  temporary2 = temporary2 >>16;

  temporary2 = temporary2 & 0xFFFFFF00;

  time2 = (int)temporary2;//Hier soll die Zahl hinter dem "," rein.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Frank N. wrote:
> 12,7 nicht schieben sondern mit 10 erweitern -> 127
>
> 127 kannst du wieder ausgeben, mußt nur noch das KOMMA richtig setzen.

Hast den (richtigen) tip von Frank nicht gelesen?

Du speicherst einfach die Zahl
int x = 127

ausgeben tust du dann

x/10, und x % 10

mit schiften wird das nix, das geht nur bei zweierpotenzen, oder fix 
komma format. (sowas kennt aber C mein ich nicht)

von Markus (Gast)


Lesenswert?

hallo,

mach das doch mit sprintf.

wandelt die float zahl in einen string. den kannst du ausgeben.

von Gast (Gast)


Lesenswert?

sprintf mit Gleitkommaunterstützung muss für die meisten 
Mikroprozessoren explizit mit einkompiliert werden und kostet dann 
ordentlich Platz.

von Falk B. (falk)


Lesenswert?


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.