4 + 10000 = -25536, wieso?

Hallo zusammen,

dies ist mein erster Post hier und ich muss direkt so eine dämliche Frage stellen.

Ich habe in einem größeren Projekt das Problem eine Zahl in einem array of char zu haben und diese als long zu benötigen.
Ich rechne die Zahl stellenweise um und dazu benutze ich einen Code, den ich gerne noch posten kann. Ich habe aber mein
Problem eingekreist und den folgenden Code geschrieben, der den oben genannten Fehler produziert:

long rechnen = 0;

void setup()
{
  Serial.begin(9600);
  rechnen = 4 * 10000;
  Serial.print(rechnen);
}

void loop()
{
}

Dieser Code liefert bei mir -25536 statt der erwarteten 40000 auf der seriellen Schnittstelle. Mit den Zahlen 0 - 3
klappt es wie erwartet. Alles darüber liefert falsche Ergebnisse.

Wie kann ich verhindern, dass die Entwicklungsumgebung intern scheinbar eine Integervariable benutzt, anstatt der
von mir definierten long bzw. unsigned long (die hab ich auch probiert).

Vielen Dank für eure Hilfe.

Michael

long rechnen = 0; >> unsigned long rechnen = 0;

Du kannst die Rechenoperanten in LONG format erzwingen indem Du ein "L" nach den Operanten (Zahlen) schreibst:

rechnen = 4L * 10000L;

Grüße Uwe

Danke Uwe, das war genau das, was mir an Wissen gefehlt hat.

Kannst Du mir Literatur empfehlen, wo auf diese undokumentierten Features eingegangen wird?
Auch das Thema Stringoperationen bzw. Array of char bereiten mir zur Zeit noch Kopfzerbrechen.

1000 Dank
Michael

Hallo Michael
Das hab ich eigentlich nur so beim lesen der Diskussionen aufgeschnappt.
Dieses Wissen und Kniffe müßtest Du aus einem Tutorial oder Lehrbuch für C (bzw C++) bekommen.

Das Referenzwek vom Entwickler von C ist "Programmieren in C." von Brian W. Kernighan (Autor),und Dennis M. Ritchie (Autor) zb bei http://www.amazon.de/Programmieren-Reference-Manual-deutscher-Sprache/dp/3446138781/ref=sr_1_4?ie=UTF8&qid=1348258520&sr=8-4

Andere können Dir mehr Ratschläge geben.

Grüße Uwe