=0;i--) " /> 用C语言编程实现十进制转化为二进制 -int decimalNum;

用C语言编程实现十进制转化为二进制

如何用C语言编写程序,输入一个十进制负数,将该负数转换为二进制数输出?(知道十进制负数转换为二进制为原码取反加一,符号位为一,但不知如何编写程序,十进制正数的转换知道如何写程序。)求各位大神赐教!!

有两种计算方法,运行的结果是完全相同的:
一是采用位运算的方法:
#include
int main()
{ int n,i;
scanf("%d",&n);
for(i=31;i>=0;i--)
printf("%d",(n&(1<<i))!=0);
return 0;
}
二是采用楼主指定的方法:
#include
int a[32];
int main()
{ int n,i,k=0;
scanf("%d",&n);
if(n<0)k=1;
for(i=31;n;i--)
{a[i]=n%2;
n/=2;
}
if(k==1)
{for(i=31;i>=0;i--)
a[i]=1+a[i];
for(i=31;a[i];i--)
a[i]=0;
a[i]=1;
}
for(i=0;i<32;i++)
printf("%d",a[i]);
return 0;
}

追问

请问:1.当n为负数时,n%2一定为正数吗?
2.代码“a[i]=1+a[i]",,如果a[i]本来为1,运行后a[i]变为2,之后会怎么样?
3.”for(i=31;a[i];i--)
a[i]=0;
a[i]=1; “
看不明白这段。它是等同于”if (a[i]=0)a[i]=1;
else a[i]=0;"吗?
求指教!

追答

1. 当n为负数时,N,除以二的余数不会是正数,他要么是零,要么是负一。事实是,如果n为奇数,那么n除以二的余数一定是一或者负一。
2.这个代码当中,那个加号应该是减号。它的作用就是经过这个运算以后,原来是一的就变成零,原来是零的就变成一。整个第二步的作用就是对原来二进制值的全部每一位都取反。
3.这一段实际上是前面两行是一个循环,最后一行是循环结束以后才做的,它的作用就是在这二进制的末位加上1。如果后面的连续几位都是1,那么他们就全部变为0,直到前面紧靠着的一位原来是0的就变成1。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-11-23

C语言_010_二进制转十进制_上

第2个回答  2019-07-23

有一种骚操作可以很快实现这个

发不了代码就发图吧emmm

得到的结果确实是没问题的emmm

如果你是c语言不是c++的话,可以了解一下这样搞

第3个回答  2019-07-20

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网