Ostatnio spotkałem się z dosyć dziwnym zjawiskiem w SDCC, mianowicie :
unsigned char a=0xff;
unsigned char b=0xff;
unsigned char c=0xff;
long wynik;
wynik=a*65536+b*256+c;
daje w wyniku: 0x00FEFFFF !!!
Tak jest FE , 16-sty bit jest zawsze zerowy niezależnie od wartości a,b,c

Reszta bitów obliczana jest prawidłowo.
Wydaje mi się, że jest to błąd kompilatora.
Obserwując kod w assemblerze zauważyłem, że przy "okrągłych" wartościach stosuje on przesunięcia w lewo, a już przy 65535 mnożenie long. Niestety nie działa to zbyt dobrze

Może jest jakiś sposób by zawsze stosował mnożenie ?!
Jeśli ktoś już się z czymś takim spotkał i potrafi to wytłumaczyć lub rozwiązać to bedę wdzięczny za wszelką pomoc

Procesor: ADuC834, SDCC: 2.4.0, zmienne w obszrze DATA.
Pozdrawiam - silver777