Un bug del compilatore?

Io :stuck_out_tongue_closed_eyes:
No, diciamo tutti e due, lesto non ha spiegato tutto.

Prova questo codice:

void setup() {
    delay(2000);
    Serial.begin(19200);
}

void loop() {
    byte a;
    
    a=15000*35000;
    Serial.println(a, DEC);
    delay(2000);
}

1500035000=525000000, che è un numero a 28 bit. Eppure il terminale stampa ancora un valore coretto.
64
Che è appunto 525000000&255 (ossia i primi 8 bit) del numero.
Se invece provi con
a=150000
350000;
otterrai 0.
questo perché il risultato non può essere contenuto in 32 bit, il tipo di dati più grandi gestibile dall'Atmega e va in overflow, dando come risultato 0. Quindi l'overflow viene ignorato (o per meglio dire non si verifica) solo finché il risultato è contenibile in un dato gestibile dal micro.