Rechnung mit 16 und 32 bit

OP #934970
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?
OP
Er schreibt einfach "5" dorthin wo eigentlich 778 stehen sollte.

Falls ich einfach eine uint16 festlege und die ausgebe funktionierts. 
Also ist es nicht der Display und nicht meine Art eine Zahl auf das disp 
zu schreiben. Der Fehler muss bei den Rechnungen irgendwo passieren...
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
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.