Просто чтобы добавить дополнительные детали к существующим ответам.
Операция mod %
всегда будет выполнять полное деление и, следовательно, даст остаток меньше делителя.
x% y = x - (y * этаж ((x / y)))
Пример функции поиска случайного диапазона с комментариями:
uint32_t rand_range(uint32_t n, uint32_t m) {
// size of range, inclusive
const uint32_t length_of_range = m - n + 1;
// add n so that we don't return a number below our range
return (uint32_t)(rand() % length_of_range + n);
}
Еще одно интересное свойство, как указано выше:
x% y = x, если x
const uint32_t value = rand_range(1, RAND_MAX); // results in rand() % RAND_MAX + 1
// TRUE for all x = RAND_MAX, where x is the result of rand()
assert(value == RAND_MAX);
result of rand()