Arni Blackcorner wrote:
> Man kann irgendwie vor oder inter der Variable den Datentyp angeben
> damit es dann richtig rauskommt.
So was nennt sich Typkonversion...
> Soviel ich weiss deklariert der
> Compiler im Voraus das Erebnis als Word wenn ich nicht angebe mit
> welchem Datentyp ich arbeite.
Der Compiler deklariert überhaupt nichts. Er rechnet nur (sofern nichts
anderes angegeben ist) in int solange die Typen aller Operanden
hineinpassen. Wenn nicht, dann wird der größte Datentyp, der vorkommt,
als Grundlage genommen. Eine Zuweisung findet aber erst nach der
Auswertung des Ausdruckes rechts vom "=" statt, so dass es bei der
Berechnung überhaupt keine Rolle spielt, was links für ein Datentyp
vorliegt. Und WORD solltest Du Dir besser schenken. Das bringt nur
durcheinander. int ist nämlich generell vorzeichenbehaftet. Benutze am
Besten die Datentypen aus der stdint.h. Die haben eine eingebaute
Längenangabe.
> So ähnlich wie hier unten nur so geht es nicht.
>
> intTmp = intTmp * intADW0 (int);
Was soll das (int) hinter dem Operanden? Abgesehen davon, dass es
nichts bringen dürfte, muss es davor und um Überläufe generell zu
vermeiden, muss der Typ der Variable links vom "=" auch groß genug
sein. Also eher
1 | uint32_t intTmp;
|
2 |
|
3 | intTmp = intADW0 * intTmp;
|
4 | //oder
|
5 | intTmp *= intADW0;
|
In diesem Fall kann man sich den cast (Typkonversion) sparen, weil
intTmp ja bereits groß genug ist.
Ansonsten wäre es (allgemein)
1 | uint16_t a, b;
|
2 | uint32_t c;
|
3 |
|
4 | c = (uint32_t)a * b;
|