Chinaunix

标题: 输入一个十进制的数,输出对应的二进制数 [打印本页]

作者: 大盛的ai    时间: 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],求高手解答,越详细约好,小弟感激不尽
作者: hellioncu    时间: 2012-11-06 13:29
b中放的是倒过来的“二进制”值,因此后面用--a,倒过来输出
作者: _Rayx    时间: 2012-11-06 14:43
一直觉得这种用递归看起来更美。
作者: folklore    时间: 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. }
复制代码

作者: fenghw8088    时间: 2012-11-06 17:03
赋值循环退出时a下标对应的元素未赋值,所以a应该先减1,然后再提取对应下标的元素
回复 1# 大盛的ai


   
作者: 大盛的ai    时间: 2012-11-06 21:07
为什么用while(a>0)呢?回复 5# fenghw8088


   
作者: zonglin    时间: 2012-11-06 21:53
a>0, --a刚好到0,不会出错
作者: fallening_cu    时间: 2012-11-07 00:03
std::bitset
作者: 指针扰幽梦    时间: 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这两类的区别
作者: shang2010    时间: 2012-11-07 11:53
做过输入二进制,输出十进制

全是数组,不然位不够
作者: 大盛的ai    时间: 2012-11-07 13:00
感谢大神!解答的很详细回复 9# 指针扰幽梦


   
作者: 指针扰幽梦    时间: 2012-11-07 16:19
回复 11# 大盛的ai 我可不是大神。。


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2