Подтвердить что ты не робот

Странное выражение

Я нашел эту строку кода в игре, которую изучаю

int charaCode = arc4random() % (126-'!'+1)+'!';

Я знаю, что такое arc4random, но выражение мне странно.

Какова цель

(126-'!'+1)+'!'

Он всегда оценивает 127.

4b9b3361

Ответ 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

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