Как генерировать случайное число на промежутке?
Собираете всю энтропию побитно (паравозиком) в одно сообщение. Берете хеш-функцию с подходящим размером и распределением, например, MD5 и пропускаете сообщение через нее. На выходе получите равномерно распределенное случайное 128-битное число. То есть от 0 до (2^128)-1, если представлять беззнаково. Делите (или берете остаток, если нужны целые), прибавляете - получаете нужный вам диапазон.
PS: MD5 здесь в качестве примера, лучше не используйте его в суровом продакшене, он скомпрометирован. Выбирайте хеш-функцию с количеством внутренних состояний, соответствующим предполагаемой длине энтропии.
Ой, какие сложности. А отстаток брать не учили? А потом добавляем нижнюю границу.
Смешивать можно как угодно. Можно побайтово xor'ить, можно складывать, можно умножать. К слову, побайтовый xor - наверное, лучший способ перемешать. Только он побайтовый и даёт едва ли не лучшее распределение.
Ну, а числа хранятся в своеборазном пуле байт. Из этого пула можно попросить один (char), два (short) или четыре (int) байта и он будет в собственных пределах. Как случайное число превести к числу в нужном диапозоне смотрим ниже:Number RandomBeetwen(Number min, Number max):
    return min + Random() % (max - min);