Por que rand () + rand () produz números negativos?

Eu observei querand() função de biblioteca, quando é chamada apenas uma vez em um loop, quase sempre produz números positivos.

for (i = 0; i < 100; i++) {
    printf("%d\n", rand());
}

Mas quando eu adiciono doisrand() chamadas, os números gerados agora têm mais números negativos.

for (i = 0; i < 100; i++) {
    printf("%d = %d\n", rand(), (rand() + rand()));
}

Alguém pode explicar por que estou vendo números negativos no segundo caso?

PS: Inicializo a semente antes do loop comosrand(time(NULL)).

questionAnswers(8)

yourAnswerToTheQuestion