Forum: Mikrocontroller und Digitale Elektronik uint16_t Array mit int16_t Werten füllen


von Array (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Timmo H. (masterfx)


Lesenswert?

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.

von Stefan E. (sternst)


Lesenswert?

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
Noch kein Account? Hier anmelden.