Ich kann den Frust
SEHR gut nachvollziehen, ich MUSS nämlich auch in "C" in der Firma programmieren.
Was da alles NICHT funktioniert ist kaum zu glauben.
Code: Alles auswählen
/*----------------------------------------*/
signed short istWert;
unsigned short sollWert;
int dummy;
int main(void)
{ U32 time;
istWert = -1;
sollWert = 12;
if (istWert < sollWert)
{
dummy = 1; /* hier geht es */
}
}
/*----------------------------------------*/
signed int istWert;
unsigned int sollWert;
int dummy;
int main(void)
{ U32 time;
istWert = -1;
sollWert = 12;
if (istWert < sollWert)
{
dummy = 1; /* !!!!! hier geht es NICHT !!!!! */
}
}
Pascal macht das immer richtig.
x := 1 SHL 8 + 1; in Pascal kommt dabei 257 heraus
x = 1 << 8 + 1; in C kommt dabei 512 heraus.......
Eine Shift links Operation ist eine Multiplikation mit 2 hoch n.
Eine Shift rechts Operation ist eine Division durch 2 hoch n.
Wie wir mal gelernt haben: Punktrechnung VOR Strichrechnung.
!!! gilt nicht in C, siehe Präzedenztabelle von „C“
Klammerung in C zwingend erforderlich:
C kann nichtmal die simpelsten Vorzeichengerechten Vergleiche,
Das größte Chaos ist die sogenannte "Integer Promotion"
Dann die Präzedenztabelle jenseits jeder Vernunft.
Ich könnt inzwischen Bücher schreiben was da für Problme aufgetreten sind, die es in anderen Sprachen garnicht gibt.