Rechnung mit 16 und 32 bit

OP #934970
Lesenswert?

Ich muss 2 Zahlen die in 16bit Reinpassen miteinander multiplizieren. 
Das Ergebnis speichere ich in einer Variablen mit 32 bit. Danach möchte 
ich die Zahl durch einen eigestellten Teiler teilen, und am Display 
ausgeben.

Dafür hab ich folgenden Code geschrieben:
1
uint16_t adtg = 9765;
2
uint16_t adcval_1 = 798;
3
uint32_t temp_32;
4
uint16_t teiler = 10000;
5
uint16_t erg;
6

7
temp_32 = adtg*adcval_1;
8
erg = temp_32/teiler;

Also:
9756*798=7785288
7785288/10000=778.5288

Ich dachte, dass die Nachkommastellen jetz einfach verworfen werden da 
es sich ja un einen Integer handelt (Die nachkommastellen brauch ich 
auch nicht) und einfach 778 ausgegeben wird. Leider funktioniert das 
nicht.
Denke da hab ich wohl irgendeien fehler oder Wickel mit den 32 und 16 
bit!

Wer kann mir sagen wie es richtig geht?
#935001
Lesenswert?

wieso lässt du das temp32 nicht weg und machst gleich:
erg = (uint16_t)(adtg*adcval_1/teiler);
bzw.
erg = (uint16_t)(adtg/teiler*adcval_1);

beim 2. brauchst du ( er intern ) nicht do große Zahlen zum rechnen, 
dafür wirds aber ungenauer, da die Nachkomma verfallen.

Bei 1. und 2. sparst du dir eine 32-Bit Variable.

Das (uint32_t) ist ein Type-Cast der die Nachfolgende Zahl in diesen Typ 
wandelt.

mfg
#935004
Lesenswert?

Sorry, zu schnell auf Absenden gedrückt.

Das Ganze nennt sich "casten" und ist eine Art der Compilersteuerung. Du 
weist den Compiler damit an, die Rechnung in der entsprechenden Form 
auszufürhen.

Das Casten ist in C sehr sehr wichtig. Wenn Du hier schwächelst, 
solltest Du diese Schwäche unbedingt ausmerzen. Gute Tuts gibts in Hülle 
und Fülle.

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