Я знаю, что такое 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
Я считаю, что они просто пытаются ограничить результат печатными символами. В основном это ограничивает диапазон случайных чисел ко всему между символом "!" и "~".