Если player
является int
или имеет в неявном преобразовании в int
, то операция по модулю будет либо вернуть 0
или 1
в этом случае для четных или нечетных соответственно.
Оттуда int
имеет неявное преобразование в bool
таким образом, что 0
оценивает, чтобы false
и все ненулевые значения (включая отрицательные значения) оценки для true
.
Пример
Начиная с
player = 2;
Мы можем следовать тройную выражение шаг за шагом
player = (player % 2) ? 1 : 2;
player = (2 % 2) ? 1 : 2;
player = 0 ? 1 : 2; // 0 evaluates to false
player = 2;
Однако, я думаю, что эта логика ошибочна, они, вероятно, имел в виду
player = (player % 2) ? 2 : 1;
Это действительно «переключит» игроков чередующимся образом, то есть когда player
изначально 1
, после тройного будет назначено 2
и наоборот.
Неявные преобразования. Это ужасный код, но, к сожалению, довольно распространенный. Условие * должно быть записано как 'player% 2 == 1'. –