У меня возникают трудности с пониманием строки в программе преобразования десятичных чисел в двоичные

Хорошо, я знаю, что это глупый вопрос, поскольку он связан с реверсом цикла, но я изо всех сил пытаюсь это понять. Я даже пытался сделать отдельный оборот для программы цикла, чтобы очистить контекст, но у меня все еще проблемы.

Так вот мой код

#include<iostream>
using namespace std;
int main()
{
    int i,d,j=0,b[100];
    cin>>d;
    while(d>0)
    {
        b[j]=d%2;
        d=d/2;
        j++;
    }
    //cout<<j;
    for(i=j-1;i>=0;i--)
    {
        cout<<b[i];
    }
}

Теперь, пожалуйста, объясните мне цикл. Почему это должно быть i=j-1;i>=0;i--? Не может ли это быть i=j;i>0;i--?

Когда я даю 109 в качестве ввода и использования i=j;i>0;i-- Я получаю 6946348110110 в качестве вывода, и если я использую i=j;i>=0;i-- тогда я получаю 69463481101101

Я новичок. Пожалуйста помоги!

1 ответ

В последний раз, когда выполняется цикл while, b[j]=d%2 добавим значение, скажем, в позицию 4 (b [0,1,2,3,4]). Переменная 'j' будет по-прежнему увеличиваться на единицу, чтобы завершить цикл, принимая значение 5. Таким образом, при запуске цикла 'for' вы получите вкладку, переходящую к 4, но значение 'j' равно 5, объясняя полезность использования i=j-1, Теперь ваш цикл будет проверять значения [4,3,2,1,0] вместо [5,4,3,2,1], что не является точным.

Другие вопросы по тегам