1. q=2 2 < 2 p=2 q=0
2. q=0 2 < 0 p=2 q=2
3. q=4 2 < 4 p=4 q=0
4. q=0 4 < 0 p=4 q=4
5. q=8 4 < 8 p=8 q=0
6. q=0 8 < 0 p=8 q=8
7. q=16 8 < 16 p=16 q=0
8. q=0 16 < 0 p=16 q=16
9. q=32 16 < 32 p=32 q=0
10. q=0 32 < 0 p=32 q=32
Odpowiedź do zadania: Instrukcja q = p - q wykona się dziesięć (10) osiem (8) razy.
Gdy q osiąga wartość 32 pętla for dalej się nie wykonuje.
Zauważ, że na początku pętla for (wartość q) inicjalizowana jest na 2. Dalej, gdy wykonuje dalsze iteracje nie nadpisuje sobie tej wartości dwójką, tylko pomija pierwszą część z trzech w pętli for i sprawdza dalej kolejno instrukcje. Czyli po pierwszej iteracji, pętla nie wykonuje tej instrukcji q = 2, ona wypada z obiegu. Dla zwizualizowania:
for(int q=2; q<32; q=q*2) ...
Nie wiem, czemu masz napisane w książce, że wskazana instrukcja wykona się ośmiokrotnie, ponieważ mi wyszło, że dziesięciokrotnie.
Przepraszam za wprowadzenie w błąd. Pętla wykona instrukcję ośmiokrotnie, nie dziesięciokrotnie.