我正在尝试学习如何将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);
}
答案 0 :(得分:2)
num=-(nv+r);
显然是否定的,因为nv
和r
都是肯定的。
我怀疑你真的想要
num = nv
或:
num -= (nv + r)
另请注意,您的停止条件为num >= 0
- 如果您进行第一次更改,您将获得无限循环,因为当您到达num ==0
时,您将除以2,并获得{{ 1}}并将nv == num /2 == 0 / 2 == 0
分配回nv
(*)请注意,第二次更改也将提供无限循环:num
和0 % 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;
}
}
在这种情况下,顺序是从最低有效位到最高有效位。