C语言问题求解谢谢

详解谢谢... 详解谢谢 展开
 我来答
拥抱Linux
2019-01-18 · 知道合伙人教育行家
拥抱Linux
知道合伙人教育行家
采纳数:418 获赞数:2159
大学的校级奖学金,机械行业十年工作经验

向TA提问 私信TA
展开全部

程序运行的详细过程,请见此图:

所以,完整的输出结果为

1

1

0

0

早睡是谎言
2019-01-18 · 超过27用户采纳过TA的回答
知道答主
回答量:98
采纳率:62%
帮助的人:11.6万
展开全部

程序入口,main(),调用函数,Bin(12)

x=12

x=12,x/2==6   是   调用自身

x=6,x/2==3   是   调用自身

x=3,x/2==1   是   调用自身

x=1,x/2==0   否    输出:1%2=1

回到上一层,3%2=1

回到上一层,6%2=0

回到上一层,12%2=0

程序运行结果:

1

1

0

0

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cahcker
2019-01-18 · TA获得超过1915个赞
知道小有建树答主
回答量:957
采纳率:81%
帮助的人:297万
展开全部
这个函数的作用是反向输出2进制数……
具体解释一下这个Bin函数吧:
首先,判断x/2是否大于0,大于0 的时候调用Bin(x/2),其实就是把x除以2以后再次调用函数,所以这个函数每一次都会把原来的x的数字给除以2,一直到x等于1为止。这个时候函数结束。
然后,这个Bin函数输出此时x对于2的余数,当x等于偶数时余数为0,等于奇数时余数为0.
其实这个就是我们求一个数的二进制表达方式时是正好相反的顺序,我们来看一看普通情况下求一个数的二进制是怎么求的:
例如原来的数为10,则:
(1)先求这个数对2的余数,写在“个位”上。现在10对2的余数为0.,所以现在数字为“0”
(2)判断这个数是否大于1,等于1时计算完毕,大于1时除以2求商并回到(1)。10大于1,大于1时将这个数除以2并求整数(商),现在10除以2,等于5.
(3)再次回到(1),现在求5对2的余数,写在“十位”上,现在5对2的余数为1,于是,原来的数字现在为“10”。
(4)再次回到2,5除以2,求整数,等于2.
(5)再次回到(1),现在2对2的余数,写在“百位”上,为0,现在的数字为“010”
(6)再次回到(2),2除以2,等于1
(7)再次回到(1),这一次,1对2的余数,等于1,写在“千位”上,现在数字为“1010”
(8)现在回到(2) 1等于1,计算完毕,所以10的二进制数为“1010”。
而现在这个bin函数会正好将这个二进制数给反过来写,因为printf函数会一个一个的打印当前这个数对2的余数,而不会将第一次的余数放在“个位”,第二次放在“十位”,第三次放在“百位”这样,所以原来我们手工计算的结果(从右像左写),在Bin中完全会被反过来(从左向右写),不知道我这样解释你明白了没有……
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syx54
2019-01-18 · TA获得超过7377个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2659万
展开全部

拥抱Linux用图回答很好!

我也来用个图:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aning
2019-01-18 · 软件工程师
aning
软件工程师
采纳数:182 获赞数:782
做过软件商城开发。

向TA提问 私信TA
展开全部
首先,此题的作用是十进制数12,转换为二进制数1100。你可以把12换成bin(2),进入此函数首先判断2/2=1,则迭代调用bin(1),进入bin(1)后判断1/2=0,则输出1%2=1,既输出1,返回bin(2),输出2%2=0。最后结果是10既是十进制数对应的二进制数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式