Archiv
Ansicht:   
Suche   erweiterte Suche

Nachricht aus dem Archiv

baeuchlein schrieb am 09.August.2009, 01:50:03 in der Kategorie pc.coding

Variablen Definitionsproblem? (C)

> ich versuche mich weiterhin am Microcontroller und scheitere bei einer
> Formelberechnung wenn das Ergebnis scheinbar größer 65535 ist.
> [...]
> long t; // long = 32Bit Zahl mit Vorzeichen
> [...]
> Ich meine, die Variablen sind doch schon auf \"long\" gesetzt.

Ich habe mal was davon gehört, dass je nach Ziel-Architektur Wörter wie \"long\" etc. nicht immer dieselbe Bedeutung haben. So könnte das hier auch für 16-Bit-Werte statt 32-Bit-Werte stehen. Ich bin mir aber nicht sicher, ob das bei C oder vielleicht bei Pascal war.

In einem C-Buch, was hier herumliegt, steht ein längeres Gelaber drin, dem zu entnehmen ist, dass \"int\" immer eine für den jeweiligen Rechnertyp \"optimale\" Größe (was auch immer das jetzt sein mag...) ist (z.B. eine 16-Bit-Zahl bei PC-kompatiblen Rechnern), \"long\" im Gegensatz dazu aber \"länger\" ist. Was hier \"länger\" heißen soll, wird ganz und gar nicht spezifiziert. Na dann viel Spaß beim Herumraten... :no:

Wie auch immer... kannst Du vielleicht mal eine Schleife einbauen, die von z.B. 65500 ausgehend immer weiter \'raufzählt, bis wieder eine Null erscheint, und dann irgendwie (!) mitteilt, welche Zahl davor erreicht war? Falls keine direkte Ausgabe des Ergebnisses möglich ist, kannst Du ja auch sowas machen wie: Bei 65535 (also 2 hoch 16 minus 1) geht die grüne Lampe an, bei 2 hoch 32 minus 1 (ca. 4,29 * 10 hoch 9) geht die rote an. (Das mit dem Vorzeichen kann ich im Augenblick nicht einordnen, aber den Trick an sich verstehst Du bestimmt auch.)

Wenn dann 65535 \'rauskommt, ist das der Beweis dafür, dass aus irgendwelchen Gründen 16-Bit-Werte genutzt werden trotz \"long\". Das weitere Detektivspiel :sherlock: überlasse ich dann Dir, in C bin ich bisher nicht weit gekommen... ;-)
Archiv
Ansicht:   
Suche   erweiterte Suche
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz