Ну, для флага, изменяющегося для каждого нечетного числа, похоже, что ваш логический параметр должен быть истинным, если и только если (n+3)%4 <= 1
, где %
- оператор по модулю:
n (n+3)%4 Boolean
-- ------- -------
0 3 false
1 0 true
2 1 true
3 2 false
4 3 false
5 0 true
6 1 true
7 2 false
8 3 false
9 0 true
10 1 true
11 2 false
12 3 false
:: : : :
Я специально добавил три вместо того, чтобы вычесть один, поскольку некоторые языки имеют разные представления о том, что должен делать оператор по модулю для отрицательных чисел. И имейте в виду, что это не зависит от языка. Если вы специально ищете решение на языке C или C, см. Отличный ответ здесь от Christoffer Hammarström ((n + 1) & 2
на всякий случай, когда он вообще исчезнет) - это гораздо более кратко в этих языки.