这是我的代码,我认为移位运算符有问题,我在嵌入式软件中使用它们但我不知道在普通代码上使用它们是否可以,我编写了一个代码来做同样的目的但是使用添加(2 * 10 ^位)的方法但是如果可能的话,使用轮班似乎更容易,请帮助:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double find_power(double x);
int main()
{
double bin=00000000, dec , k ;
printf("enter decimal number:\n");
scanf("%d",&dec);
for(;;)
{
k=find_power(dec);
bin|=(1<<k);
dec-=pow(2,k);
if(dec==1)
{
bin|=(1<<0);
break;
}
else if(dec==0)
{
bin&=(~(1<<0));
break;
}
}
printf("%d",bin);
return 0;
}
double find_power(double x)
{
double i=1,j=0;
for(;;)
{
i*=2;
if(x>=i)
{
j++;
}
else if(x<i)
{
break;
}
}
return j;
}
答案 0 :(得分:-1)
您在整个代码中疯狂地混合了double
和int
。您尝试使用scanf将int
读入double
,这将调用未定义的行为。然后,您尝试将double
变量与按位运算符一起使用,这很可能没有任何意义。您将要使用已知大小的无符号整数。
您应该启用/侦听编译器警告。