преобразование целых чисел в двоичное - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь научиться конвертировать целые числа в двоичные.он работает, но это вывод: введите число: 33 Новое значение: 16 Остаток: 1 Текущий VAlue: -17 Счетчик: 1

Я ценю любую помощь.Спасибо.Хорошо, извини, мой плохой.Выход должен быть: 00100001

#include <stdio.h>

int main()
{
  int nv, r, num;

  printf("Enter a number: ");
  scanf("%d",&num);

   int counter=0;
   while(num>=0)
   {
      nv=num/2;
      r=num%2;
      num=-(nv+r);
      counter++;

    printf("New Value: %d\n",nv);
    printf("Remainder: %d\n",r);
      printf("Current Value: %d",num);
   }
    printf("Counter: %d\n",counter);

}

Ответы [ 3 ]

2 голосов
/ 27 марта 2012
num=-(nv+r);

Очевидно, отрицательно, так как и nv и r являются положительными.

Я подозреваю, что вы действительно хотели

num = nv

или:

num -= (nv + r)

Также обратите внимание, что ваше условие останова - num >= 0 - если вы сделаете первое изменение, вы получите бесконечный цикл, так как, когда вы достигнете num ==0, вы разделите на 2, и получите nv == num /2 == 0 / 2 == 0 и назначите nv обратно к num

(*) Обратите внимание, что и второе изменение будет создавать бесконечный цикл: 0 % 2 == 0 и 0 / 2 == 0, поэтому num -= (nv + r) == 0 - (0 + 0) == 0

1 голос
/ 27 марта 2012

Один простой способ сделать это - знать, что машина хранит число в двоичном виде. И вам нужно только использовать это, чтобы напечатать число в двоичном формате.

int main()
{
   int val=1;
   int n=0;
   int num;

   printf("Enter a number: ");
   scanf("%d",&num);
   while(val <= num)
   {
        if(val & num) printf("bit %d is '1'\n", n);
        else printf("bit %d is '0'\n", n);
        n++;
        val<<=1;
   }

}

В этом случае порядок идет от младшего к старшему значащему биту.

1 голос
/ 27 марта 2012

Это то, что вы пытались достичь?

#include <stdio.h>

int main()
{
   int nv, r, num;
   int counter=0;

   printf("Enter a number: ");
   scanf("%d",&num);

   while(num>0)
   {
      nv=num/2;
      r=num%2;
      num-=(nv+r);
      counter++;

      printf("New Value: %d\n",nv);
      printf("Remainder: %d\n",r);
      printf("Current Value: %d\n",num);
   }
   printf("Counter: %d\n",counter);
   return 0;
}
...