Код:
#define RAND_MAX 32767 
static unsigned long int next = 1;
int rand(void)
{
  next = next * 1103515245 + 12345;
  return (unsigned int)(next/65536) % (RAND_MAX + 1);
}
void srand(unsigned int seed)
{
  next = seed;
}
Это пример функции rand() для языка Си. При выводе числа он отбрасывает 16 младших и 1 старший разряд. Как отбрасываются младшие разряды я понимаю, а вот каким образом 
Код:
% (RAND_MAX + 1)
 отбрасывает 1 старший разряд?