Странный результат из arc4random_uniform ().Что произошло - PullRequest
0 голосов
/ 28 января 2019

вчера у меня был следующий код:

NSInteger test = arc4random_uniform(10)-5;

если я проверял с помощью отладчика, что внутри теста, иногда это не было число от -5 до 5. Иногда это было случайное большое целое число.

После того, как я изменил код на это:

NSInteger test = arc4random_uniform(10);
test -= 5;

я получил только число от -5 до 5. Я довольно плохо знаком с Objectiv C и обычно я пишу только на C / C ++.Но это не имеет смысла для меня.

Может кто-нибудь объяснить, что случилось?

1 Ответ

0 голосов
/ 28 января 2019

Семейство функций arc4Random возвращает u_int32_t.«U_» означает «без знака» и определяет тип выражения с литералом 5.Таким образом, первое выражение (примерно в половине случаев для случайных чисел <5) будет производить отрицательный знак без знака, который будет обрабатываться как почти <code>UINT_MAX.

Второе выражение приводит случайное значение к первому знаковому типу int, поэтомупоследующее вычитание работает как положено.

...