【问题标题】:converting integers to binary将整数转换为二进制
【发布时间】:2012-04-10 18:45:33
【问题描述】:

我正在尝试学习如何将整数转换为二进制。它运行但这是输出:输入数字:33 新值:16 余数:1 当前值:-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);

}

【问题讨论】:

  • 您到底想打印什么?我的意思是,“转换为二进制”一开始就含糊不清,但是您也有四个输入输出,这使得您完全不清楚您想要什么。 input=33 的输出应该是什么?我的意思是,我能想到的只有00000000000000000000000000100001
  • 是的,先生。我已经添加了另一条评论来解释。是的,应该是输出 => 00100001。谢谢
  • 不,我的意思是您打印的所有其他内容;他们应该是什么?另外,为什么是8个二进制数字?这不适用于超过 255 的数字。而且我看不出你试图在哪里打印 8 个二进制数字。

标签: c binary type-conversion


【解决方案1】:
num=-(nv+r);

显然是负面的,因为nvr 都是正面的。

我怀疑你真的想要

num = nv

或:

num -= (nv + r)

还要注意你的停止条件是num &gt;= 0——如果你做第一次改变,你会得到一个无限循环,因为当你到达num ==0时,你将除以2,得到nv == num /2 == 0 / 2 == 0并赋值@ 987654329@回num

(*)请注意,第二个更改也会产生无限循环:0 % 2 == 00 / 2 == 0,所以 num -= (nv + r) == 0 - (0 + 0) == 0

【讨论】:

  • OOOOOOOH!!!!!!!非常感谢先生。我解决了这个问题。最后我得到了我想要的这部分。这只是我想一步一步做的事情的 1/4。
  • @Bartg:不客气。一步一步是一个好方法!祝你好运!
【解决方案2】:

这是你想要完成的吗?

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

【讨论】:

  • 他从看到完整的未解释代码中学到了什么?
  • 他已经非常接近解决方案了。而且我对他的代码所做的修改很简单。
  • 实际上 VascoP 先生所做的只是修复了 MY CODE 的一些细节(重要),我很感激但很遗憾没有奏效。
  • 你应该解释一下变化是什么,很难看到有人把num=-(nv+r)变成num-=(nv+r)。另请注意:此代码对于 num == 0 失败
  • 谢谢 VascoP 先生,感谢您的帮助。
【解决方案3】:

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

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

}

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

【讨论】:

    猜你喜欢
    • 2017-07-13
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2014-03-13
    • 2021-11-03
    相关资源
    最近更新 更多