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

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

2019-07-21 · TA获得超过4810个赞
知道大有可为答主
回答量:1万
采纳率:83%
帮助的人:695万
展开全部

有两种计算方法,运行的结果是完全相同的:
一是采用位运算的方法:
#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。
彭珂的课堂
2020-11-23 · IT资讯、技能教学、学习经验分享。
彭珂的课堂
采纳数:98 获赞数:343

向TA提问 私信TA
展开全部

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
作死的卡拉
2019-07-23
知道答主
回答量:28
采纳率:66%
帮助的人:5.7万
展开全部

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

发不了代码就发图吧emmm

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ma_se
2019-07-20 · TA获得超过328个赞
知道小有建树答主
回答量:403
采纳率:75%
帮助的人:107万
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式