怎么让rand()产生更大范围的伪随机数

如何让rand()产生更大范围的伪随机数?
由于rand()产生的随机数的范围受到RAND_MAX的约束,在windows下能产生随机数的最大范围是[0,32767],如何让rand()产生更大范围的伪随机数呢,比如[0,50000]?请各位大神赐教!
c语言

------解决方案--------------------
So easy!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned long ulrand(void) {
    return (
     (((unsigned long)rand()<<24)&0xFF000000ul)
    
------解决方案--------------------
(((unsigned long)rand()<<12)&0x00FFF000ul)
    
------解决方案--------------------
(((unsigned long)rand()    )&0x00000FFFul));
}
int i;
unsigned long ul;
void main() {
    srand(time(NULL));
    for (i=0;i<10;i++) {
        ul=ulrand();
        printf("%010lu 0x%08x\n",ul,ul);
    }
}
//2337588057 0x8b54c359
//1977377429 0x75dc6295
//3607316769 0xd7034921
//0009828482 0x0095f882
//3350859779 0xc7ba1003
//0945794621 0x385fae3d
//3400869024 0xcab524a0
//3097846779 0xb8a563fb
//4287421124 0xff8cdac4
//3934016258 0xea7c5302