uint16_t Array mit int16_t Werten füllen

Gast #2840246
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
Persönliche Seite #2840248
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.
#2840253
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren