2017-02-02 2 views
-2

Я новичок в программировании, и я пытаюсь понять код, который преобразует десятичный код в двоичный. Код выглядит следующим образом:Может ли кто-нибудь помочь мне понять выполнение этого кода?

#include <stdio.h> 

int main() 
{ 
    long int DN,quo; 
    int rem[106],i=1,j; 

    printf("give me a decimal number: "); 
    scanf("%ld", &DN); 

    quo = DN; 

    while(quo!=0) 
    { 
    rem[i]= quo % 2; 
    quo = quo/2; 
    i++; 
    } 

    printf("Equivalent binary value of your decimal number %ld\n: ",DN); 

    for(j = i-1 ;j> 0;j--) 
    printf("%d",rem[j]); 
} 

Может ли кто-нибудь помочь мне понять часть, начинающуюся с цикла while? Мне очень жаль, что вы опубликовали такой простой вопрос.

+0

Так как же цикл в нижней части убедившись, что я получить мои остатки в обратном порядке? – Ufomammut

+0

Его код для преобразования десятичного числа в двоичный. дальнейшее чтение http://math.stackexchange.com/questions/86207/converting-decimalbase-10-numbers-to-binary-by-repeatedly-dividing-by-2 и http://stackoverflow.com/questions/2548282/ decimal-to-binary-and-vice versa – roottraveller

+1

Пожалуйста, используйте исполняемый файл отладки и с помощью любого отладчика, такого как gdb, вы можете очень хорошо понимать, какие значения хранятся в 'rem []', и каково значение ' i' непосредственно перед циклом 'for'. Это улучшит ваше понимание кода. – Rishi

ответ

0

Это реализация стандартного способа преобразования числа в его десятичное представление.

  1. [quotioent, остаток] = а ÷ 2
  2. д [я] = остаток
  3. Если частное 0 мы сделали
  4. еще Гото 1
  5. Read D [я] в обратном направлении и распечатать его.
1

Пусть вход десятичное число 13

Step 1. 13/2 , Remainder = 1, Quotient = 6 
Step 2. 6/2 , Remainder = 0, Quotient = 3 
Step 3. 3/2 , Remainder = 1, Quotient = 1 
Step 4. 1/2 , Remainder = 1, Quotient = 0 

Теперь Двоичный эквивалент 13 является остатки в обратном порядке: 1101

Смежные вопросы