免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 18109 | 回复: 11
打印 上一主题 下一主题

[C] 输入一个十进制的数,输出对应的二进制数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-06 13:22 |只看该作者 |倒序浏览
#include<stdio.h>
void main()
{
int a=0,i,k;
int b[32];
printf("请输入一个十进制数:\n");
scanf("%d",&i);
while(i!=0)
{
k=i%2;
b[a++]=k;
i=i/2;
}
printf("转为二进制数为:\n");       
while(a>0)
{
printf("%d",b[--a]);
}

printf("\n");

}
小弟新手,下面的这个while循环中具体是什么意思,为什么用b[--a],求高手解答,越详细约好,小弟感激不尽

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2012-11-06 13:29 |只看该作者
b中放的是倒过来的“二进制”值,因此后面用--a,倒过来输出

论坛徽章:
0
3 [报告]
发表于 2012-11-06 14:43 |只看该作者
一直觉得这种用递归看起来更美。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
4 [报告]
发表于 2012-11-06 15:54 |只看该作者
回复 3# _Rayx

  1. char *bitstr(const int isrc,char bits[]){
  2.         for(int ibit=0;ibit<sizeof(int)*CHAR_BIT;ibit++){
  3.                 bits[ibit]='0'+((isrc>>(sizeof(int)*CHAR_BIT-ibit-1))&0x01);
  4.         }
  5.         bits[sizeof(int)*CHAR_BIT]=0;
  6.         return bits;
  7. }
  8. int main(){
  9.         char bits[sizeof(int)*CHAR_BIT+1];
  10.         printf("%s\n",bitstr(1,bits));
  11.         printf("%s\n",bitstr(0x80000000,bits));
  12.         printf("%s",bitstr(0x80000002,bits));
  13.         return 0;
  14. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-11-06 17:03 |只看该作者
赋值循环退出时a下标对应的元素未赋值,所以a应该先减1,然后再提取对应下标的元素
回复 1# 大盛的ai


   

论坛徽章:
0
6 [报告]
发表于 2012-11-06 21:07 |只看该作者
为什么用while(a>0)呢?回复 5# fenghw8088


   

论坛徽章:
0
7 [报告]
发表于 2012-11-06 21:53 |只看该作者
a>0, --a刚好到0,不会出错

论坛徽章:
0
8 [报告]
发表于 2012-11-07 00:03 |只看该作者
std::bitset

论坛徽章:
0
9 [报告]
发表于 2012-11-07 09:45 |只看该作者
假设你输入10,那么输出应该为:
0 --->b[0]
1 ---->b[1]
0 ---->b[2]
1 ---->b[3]
表达式a++是先给a赋值,再执行+1,语句b[a++]=k;执行后a变为a+1;执行到这a已经等于4了,下面的while里第一次循环b[--a]相当于b[3],倒过来输出就是1010,楼主区别一下a++,++a这两类的区别

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
10 [报告]
发表于 2012-11-07 11:53 |只看该作者
做过输入二进制,输出十进制

全是数组,不然位不够
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP