Pages: [1]   Go Down
Author Topic: 4 + 10000 = -25536, wieso?  (Read 827 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Global Moderator
Boston area, metrowest
Online Online
Brattain Member
*****
Karma: 435
Posts: 23598
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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.

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst die Rechenoperanten in LONG format erzwingen indem Du ein "L" nach den Operanten (Zahlen) schreibst:
Code:
rechnen = 4L * 10000L;

Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: