Bug desconocido multiplicación con unsigned long

El problema es muy sencillo... el siguiente código para algunos valores da correcto para otros se genera una especie overflow..

p.ej. 33 * 1000 no da 33000 sino 4294934760
en cambio 33000 * 1000 si da 33 000 000

por lo que no es un overflow en el sentido estricto... ¿qué es lo que está pasando?

unsigned long mult;

void setup() {
Serial.begin(9600);
}
void loop() {

mult = 33 * 1000;
Serial.println (mult);

}

hola,

creo que la solución la tienes en [1]

mult = (long)33*(long)1000;

33000 (operador) no cabe en un int, te hace el cast automático…

haciendo cast solucionas este problema.

un saludo!

[1] http://arduino.cc/en/Reference/Arithmetic