Hab leider gerade kein C-Buch zur Hand, stelle hier also eine dumme
Frage. Wie war das noch mit dem Typ und Vorzeichen von Konstanten bei
Vergleichen in C? Beispiel:
Warum wird der int8_t Variablen "byte" mit dem Wert '-128' in diesem
Beispiel (WinAVR-20071221, Programm kompiliert mit der Option '-Os')
durch das 'if' der Wert '127' zugewiesen ...
1 | #include <inttypes.h>
|
2 | int8_t byte=-128;
|
3 | int main(void) {
|
4 | while (1) {
|
5 | if (byte==(int8_t)0x80) byte=127;
|
6 | // byte ist jetzt 127
|
7 | }
|
8 | }
|
.... ohne typecast für '0x80' aber nicht (tatsächlich wird das 'if'
sogar bei 'O0' wegoptimiert, aber es geht mir nicht um die Optimierung,
sondern nur um den Typ/das Vorzeichen der Konstanten beim Vergleich)?
1 | #include <inttypes.h>
|
2 | int8_t byte=-128;
|
3 | int main(void) {
|
4 | while (1) {
|
5 | if (byte==0x80) byte=127;
|
6 | // byte bleibt -128
|
7 | }
|
8 | }
|
Anmerkung: Bei der Initialisierung der Variable ist 'int8_t byte=-128;'
identisch mit 'int8_t byte=0x80;', nur beim Vergleich ist ein explizites
typecasting nötig.