Go Down

Topic: 4 + 10000 = -25536, wieso? (Read 961 times) previous topic - next topic

dengor

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:

Code: [Select]
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

CrossRoads

long rechnen = 0; >> unsigned long rechnen = 0;
Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

uwefed

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

rechnen = 4L * 10000L;


Grüße Uwe

dengor

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

uwefed

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

Go Up