datentyp problem
-
hi,
ich habe folgenden code:
unsigned int byte1 = 0x4B00; char byte2 = 0x80; unsigned int result = 0; result = (byte1 & 0x1FFF) | byte2; // <--- ist 0xFF80; woher kommt das FF?????? hm...
-
char byte2 = 0x80;
Hierbei ist das höchste Bit gesetzt. Der Compiler interpretiert byte2
dann als eine negative Zahl, genauer gesagt als -128.Bei
result = (byte1 & 0x1FFF) | byte2;
wird byte2 in einen Integer umgewandelt. Somit wird aus der
-128 = 0x80 (char) = 0xffffff80 (int)
So kommen die FFs zustande.
Gruß mcr
PS: dem gcc kann man mit -W -Wall -pedantic ziemlich geschwätzig machen,
was Warnings angeht.Hier:
Warnung: Überlauf in impliziter Konstantenkonvertierung
Eine Lösung für dein Problem:
unsigned char byte2 = 0x80;
-
byte2 ist negativ, 0x80 ist -128, und das ist nach Integer konvertiert halt 0xFF80.
-
stimmt du hast recht;) dachte char muss jetzt von 0 - 255 gehn...blöder denkfehler;/
-
wie sag ich dem gcc das er hier nen error ausgeben soll?
-
-Wpedantic-errors oder so