用C语言编程实现十进制转化为二进制 5
如何用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。
展开全部
C语言_010_二进制转十进制_上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询