Будет ли различаться разница между RAND_MAX и UINT_MAX?

Моя домашняя работа включает в себя создание случайных целых чисел между 0 и 2 ^ 30 . В прошлом мы узнали, что rand () возвращает только целые числа до RAND_MAX , что это меньше, чем UINT_MAX , и что мы можем использовать сдвиг битов для заполнения этой UINT_MAX емкости. Из некоторого чтения, которое я прочитал (здесь, на SO), я понимаю, что это может быть не очень хорошая идея, если для меня важно распределение этих чисел. Сказав это, мой профессор уточнил этот метод.

У меня вопрос, на сколько нужно сдвинуть бит? Всегда ли разница между RAND_MAX и UINT_MAX будет такой, что существует безопасная константа для битового сдвига? Или нужно провести начальное зондирование, чтобы определить число, на которое нужно сдвинуть бит? Должен ли я просто немного сдвигать бит и проверять его на UINT_MAX ?

Я спрашиваю, потому что UINT_MAX определено как минимум определенное число ( ] 65535 ), но на моей машине UINT_MAX намного больше ( 4294967295 ). Это заставило меня волноваться, что я могу закончить домашнее задание на выходных, приехать в школу и обнаружить, что все не работает достаточно хорошо, чтобы отправить его.

Спасибо!

Ссылки:

Я читал пару похожих вопросов, но не смог получить от них ответ.

Всегда ли значение RAND_MAX (2 ^ n) -1 ?

генерирует случайное число в диапазоне от 0 до n где n может быть > RAND_MAX

На самом деле, второй вопрос выше заставляет меня усомниться в целесообразности этого вообще?

5
задан Community 23 May 2017 в 12:20
поделиться