Помогите понять эту строчку, пожалуйста. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ for (i = (m & 1) == 1 ?...

0 голосов
29 просмотров

Помогите понять эту строчку, пожалуйста. ЯЗЫК ПРОГРАММИРОВАНИЯ СИ
for (i = (m & 1) == 1 ? m : m + 1; i <= n; i += 2)<br> {
sum += i * i; //*= - умножение с присваиванием
}


Информатика (678 баллов) | 29 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Судя по всему, здесь в цикле складываются квадраты всех нечетных чисел от m до n включительно.

m & 1 - это битовая конъюнкция. Результатом будет 1, если m нечетное, и 0, если m - четное (то есть, содержит или не содержит соответствующий разряд)

Выражение вида T ? X : Y, где T - логическое высказывание, принимает значение X, если T истинно, и Y, если T ложно.

Соответственно, i = (m & 1) == 1 ? m : m + 1 означает, что
если m нечетное, то i = m
если четное, i = m+1 (то есть, первое нечетное число после m)

i += 2 означает, что цикл идет с шагом, соответственно, рассматриваются только нечетные числа.

(8.5k баллов)