将整数转换为二进制

时间:2012-03-27 08:47:16

标签: c binary type-conversion

我正在尝试学习如何将int转换为二进制。它运行但这是输出:输入一个数字: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 个答案:

答案 0 :(得分:2)

num=-(nv+r);

显然是否定的,因为nvr都是肯定的。

我怀疑你真的想要

num = nv

或:

num -= (nv + r)

另请注意,您的停止条件为num >= 0 - 如果您进行第一次更改,您将获得无限循环,因为当您到达num ==0时,您将除以2,并获得{{ 1}}并将nv == num /2 == 0 / 2 == 0分配回nv

(*)请注意,第二次更改也将提供无限循环:num0 % 2 == 0,因此0 / 2 == 0

答案 1 :(得分:1)

这是你想要完成的吗?

#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;
}

答案 2 :(得分:1)

一种简单的方法是知道机器以二进制形式存储数字。而您需要做的只是使用它来打印二进制数字。

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;
   }

}

在这种情况下,顺序是从最低有效位到最高有效位。