moin, kurze Frage: Kann ein Array >uint16_t Array[20]; mit negativen Werten >Array[1] = 10-100; //Beispiel gefüllt werden, oder werden die Ergebnisse dann falsch dargestellt? Mein Compiler gibt keine Warnhinweise, mglw. ist dies jedoch Ursache dafür, dass das Programm gerade nicht das tut was es soll... mfg
Array schrieb: > oder werden die Ergebnisse dann falsch dargestellt Definiere, was "falsch dargestellt" bedeutet. Wenn Du ein Element des Array als uint16_t betrachtest, wird es die Regeln für uint16_t einhalten; Dein als negativer int16_t-Wert beschriebenes Element enthält natürlich keinen negativen uint16_t-Wert, da es so etwas nicht gibt. Im übrigen hat die Betrachtung nichts mit Arrays zu tun, sondern kann auf die Unterscheidung unsigned/signed reduziert werden.
Das geht schon. Es steht dann in beiden das gleiche drin (also 0xFFA6). Jedoch kannst du beim uint16 array dann nicht auf "< -10" testen. Dafür musst du dann erst nach int16 casten, also z.B. so:
1 | int16_t x; |
2 | uint16_t y; |
3 | |
4 | x = 10-100; |
5 | y = 10-100; |
6 | |
7 | if(x < -10) |
8 | printf("\nx ist kleiner -10"); |
9 | if((int16_t)y < -10) |
10 | printf("\ny ist kleiner -10""); |
wenn du den Cast bei "y" weglässt wird halt nicht "y ist kleiner -10"" ausgegeben weil der Compiler eben denkt, dass "< 0" nicht geht weil y ja unsigned ist.
Timmo H. schrieb: > wenn du den Cast bei "y" weglässt wird halt nicht "y ist kleiner -10"" > ausgegeben Stimmt aber nur für Systeme mit int > 16Bit. Bei int = 16Bit wird es dennoch ausgegeben, weil dann der ganze Vergleich in unsigned stattfindet (und somit auch die -10 unsigned interpretiert wird).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.