Re: Rechnen mit Variablen klappt nicht.

Hy!

Habe ein ähnliches Problem, vielleicht könnt ihr mir weiterhelfen:

unsigned long x = (10*3600) + (30 *60);

Ich würde "37800" erwarten.
Als Ergebnis kommt "4294939560" raus.
Was mache ich da falsch??

[EDIT] Hab diese Diskussion abgespalten, weil keine Verbindung mit Uralten Tread.
Uwe
Moderator
[/EDIT]

Weil normal in int gerechnet wird wenn nichts dabei steht oder einer der Datentypen nicht was anderes ist.

Richtig:

unsigned long x = (10 * 3600UL) + (30 * 60);

Danke, das funktioniert!

Blöde Frage: Wie mache ich es dann, wenn ich Variablen habe die "unsigned longs" sind?

unsigned long x = 103600;
unsigned long y = 30
60;

unsigned long z = x + y;

Danke für die Antwort!

(deleted)

flashdash:
Blöde Frage: Wie mache ich es dann, wenn ich Variablen habe die "unsigned longs" sind?

Das hat dir doch Serenifly schon geschrieben.

gib mal das ein

unsigned long  x = 10 * 3600UL;
unsigned long  y = 30 * 60UL;

unsigned long  z =  x + y;

void setup() {
  Serial.begin(115200);
  Serial.println(F("\nStart"));

  Serial.print(z);
}

void loop() {

}

Verwende float am Uno nur dann, wenn es sich absolut nicht vermeiden lässt.
In 9 von 10 Fällen lässt es sich vermeiden.

flashdash:
wenn ich Variablen habe die "unsigned longs" sind?

Was links steht ist erst mal egal! Eine der Variablen die rechts sind muss unsigned long sein damit auch darin gerechnet wird

Bei z = x + y muss man nichts machen da die schon unsigned long sind. Aber Integer Literale sind erst mal nur int

Vielen Dank! Das "UL" beim Erstellen der Variablen hat´s gebracht. Ihr seid SPITZE! :slight_smile:

Hi

float ist aber der teuerste Datentyp, Den der Arduino so zu bieten hat.

MfG

PS: Ein cast geht hier auch.
long x=(uint32_t)y+z;

(deleted)

Hi

Und, meines Wissen nach, 'etwas' mehr Rechenzeit, als bei den anderen Datentypen, wo wirklich nur '4 Byte' zusammen gezählt werden müssen.

MfG

Peter-CAD-HST:
"kostet" auch nur vier Byte :slight_smile:

Kostet Flash für die Float-Bibliothek und ziemlich Rechenzeit im Vergleich zu Integern. Weil die einfachen µC nicht direkt mit Gleitkommazahlen umgehen können

(deleted)

Was bedeutet das im Detail?

Probiere es aus!

Und schaue dir das Kompilat an.