Странное выражение
Я нашел эту строку кода в игре, которую изучаю
int charaCode = arc4random() % (126-'!'+1)+'!';
Я знаю, что такое arc4random, но выражение мне странно.
Какова цель
(126-'!'+1)+'!'
Он всегда оценивает 127.
Ответы
Ответ 1
Вы неправильно это интерпретировали: оператор %
имеет более высокий приоритет, чем +
.
Итак, у вас есть:
int charaCode = (arc4random() % (126-'!'+1))+'!';
который скопирует результат функции в 0..93
и сдвигает его так, чтобы он начинался с '!'
.
Таким образом, эффективный диапазон того, что вы получаете, - это 33..126
(который является диапазоном всех видимых символов ASCII от !
до ~
).
Ответ 2
это оценивается на основе приоритета оператора следующим образом:
(arc4random() % (126-'!'+1)) + '!';
Ответ 3
%
имеет более высокий приоритет, чем +
, поэтому ваше выражение не такое же, как
arc4random() % ((126-'!'+1)) + '!'),
но это то же самое, что и
(arc4random() % (126-'!'+1)) + '!'
Первая версия может возвращать значения ниже 33, а вторая не может.
Ответ 4
то есть не все выражение i % j + 1
равно (i%j)+1
, так что это (arc4random() % (126-'!'+1)) + '!'
Doh! Я должен просто публиковать ответы ROFL: -)
Ответ 5
Я считаю, что они просто пытаются ограничить результат печатными символами. В основном это ограничивает диапазон случайных чисел ко всему между символом "!" и "~".