AVR-Studio4: Multiplikation gibt merkwürdige Werte

Gast #3772966
Lesenswert?

Hallo,

habe hier eine Multiplikation, die merkwürdige Erbebnisse liefert.
1
volatile uint64_t a;
2

3
volatile uint16_t x = 577;
4

5
a = x * 487;

Liegt das Problem darin, dass ich verschiedene Variabel-Typen verwende?


Wenn ja, müsste ich auf uint64_t casten?
1
a = (uint64_t) x * 487;
Moderator #3772985
Lesenswert?

Da das Produkt nicht in 16 Bit, aber immerhin in 32 Bit darstellbar ist,
reicht es, einen der beiden Operanden auf 32 Bit hochzucasten, so dass
die gesamte Multiplikation ebenfalls in 32 Bit ausgeführt wird. Für die
Variable a reicht für ein uint32_t statt eines uint64_t.
Gast #3773030
Lesenswert?

Danke für die schnellen Antworten!!!

Erstaunlicherweise scheint es manchmal auch ohne Casten zu gehen, warum 
auch immer!?!



Kann man die natürlichen Zahlen für Additionen, Multiplikationen, 
Divisionen usw. eigentlich grundsätzlich problemlos verwenden?

Also wie hier die 487:

a = (uint64_t) x * 487;

Oder muss man hier auch auf spezielle Eigenheiten achten?
#3773183
Lesenswert?

HelmutG schrieb:
> Kann man die natürlichen Zahlen für Additionen, Multiplikationen,
> Divisionen usw. eigentlich grundsätzlich problemlos verwenden?

Narürlich nicht. An gerade Wochentagen geht das nur mit Addition und 
Division, an ungeraden nur mit Multiplikation und Subtraktion. An 
Wochenenden umgekehrt, und jeden 29. Februar kommt immer 42 raus.

Division durch Null ist dann noch ein Sonderfall.

Alles weitere dazu steht in deinem C-Buch.

Oliver
#3773235
Lesenswert?

HelmutG schrieb:
> Danke für die schnellen Antworten!!!
>
> Erstaunlicherweise scheint es manchmal auch ohne Casten zu gehen, warum
> auch immer!?!

Ganz einfach: weil du die C Regeln nicht kennst. Da ist nichts 
geheimnisvolles drann und so schwierig sind die auch wieder nicht. Die 
stehen in jedem noch so grindigem C-Buch drinnen. Und zwar irgendwo ganz 
am Anfang in den ersten Kapiteln. Aber: wie so viele andere, denkst auch 
du, dass du ohne ordentliche Literatur C lernen kannst. Vielleicht noch 
mit irgendeinem windigen online Tutorial, das den Strom nicht wert ist, 
den man für die 10 HTML Seiten braucht um sie zu lesen und von denen der 
Autor denkt, das wäre alles was man über C wissen müsse (und bei dem von 
der wenigen präsentierten Information dann auch noch die Hälfte falsch 
ist)

Sorry. Aber das ist so.

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