Для for (int i = a; i <= b; i += c)
и при условии a
≤ b
и 0 <<code>c, расстояние от a
до b
равно b-a
, количество целых шагов размера c
, которые соответствуют на этом расстоянии (b-a)/c
(с использованием целочисленного деления, поэтому оно усекается), расстояние, пройденное таким количеством шагов, равно (b-a)/c*c
, поэтому окончательное значение равно a + (b-a)/c*c
. Это предполагает, что в арифметике c, конечно, нет переполнения, которое может быть, если b
большое и a
большое отрицательное значение.
Аналогично, для for (int i = a; i >= b; i -= c)
, последнее значение a + (a-b)/c*c
.