Nur weil du uint32_t schreibst heisst das nicht das der Compiler da auch ne 32Bit Variable draus macht.
Hallo,
kann das sein, dass das Rechnen (+,-,*,/) nur bis 16Bit möglich ist?
Das Terminal spuckt mir bei unten stehende Code kein brauchabres Ergebnis aus (bzw. eigentlich gibt es mir den Wert aus "Ergebnis - 65535 -1"!? Und das obwohl meine Variablen mit 32Bit deklariert worden sind!?
THX for Help...
mfg
Aircode
Code:#include "RP6RobotBaseLib.h" // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- int main(void) { initRobotBase(); powerON(); while(true) { uint32_t wert1 = 89200; uint32_t wert2 = wert1 + 32800; writeInteger(wert1, DEC);writeString("\n"); writeInteger(wert2, DEC);writeString("\n"); mSleep(5000); } return 0; }
Nur weil du uint32_t schreibst heisst das nicht das der Compiler da auch ne 32Bit Variable draus macht.
writeInteger() erwartet eine 16bit-Variable.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ok, anders:
der code funzt ohne probleme:
der code gibt einen anderen wert aus, und das obwohl zu dem zeitpunkt, wo "wert1" ausgegeben werden soll, "wert1" nur 16Bit groß ist!?Code:#include "RP6RobotBaseLib.h" // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- int main(void) { initRobotBase(); powerON(); while(true) { uint32_t wert1 = 700 / 100 * 100; writeInteger(wert1, DEC);writeString("\n"); mSleep(5000); } return 0; }
THXCode:#include "RP6RobotBaseLib.h" // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- // ------------------------------------------------------------------------------------- int main(void) { initRobotBase(); powerON(); while(true) { uint32_t wert1 = 700 * 100 / 100; writeInteger(wert1, DEC);writeString("\n"); mSleep(5000); } return 0; }
aircode
Ähm, wo ist der Unterschied in den Codes?!
code 1: uint32_t wert1 = 700 / 100 * 100;
code 2: uint32_t wert1 = 700 * 100 / 100;
im code 1 wird erst dividert, dann multipliziert und umgekehrt...
Glatt übersehen.
Code1: 700 / 100 = 7(geht) * 100 = 700 (geht)
Code2: 700 * 100 = 70000 (geht nicht!) / 100 = 700 (ginge auch)
Punkt vor Strichrechnung scheint ihn da nicht zu interessieren.
Code2: 700 * 100 = 70000 (geht nicht!) / 100 = 700 (ginge auch)
warum geht nicht? wert1 = 32Bit und 32Bit geht ja bis 4294967295!
Mach das mal:Zitat von KingTobi
Dann siehst du wieviel Speicher (Bytes) für wert1 reservieret wurde.Code:int main(void) { initRobotBase(); powerON(); while(true) { uint32_t wert1 = 700 * 100 / 100; writeInteger(sizeof(wert1), DEC);writeString("\n"); mSleep(5000); } return 0; }
1. beim compilieren kommt ein fehler "owerflow"
2. sizeof(wert1) = 4 ... laut terminal
Lesezeichen