RAND_MAX ist ein Makro, das dazu dient, magische Zahlen wie 65535 aus dem Code zu halten. Es kann incht umdefiniert werden (bzw. hat nicht den gewünschten Effekt).

Eine 24-bit Zufallszahl bekommst du mit

uint32_t x = (uint32_t) rand() ^ (rand() << ;

Und modulo finde ich nicht unelegant, allerdings ist damit die Gleichverteilung flöten.