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
char *bitstr(const int isrc,char bits[]){
for(int ibit=0;ibit<sizeof(int)*CHAR_BIT;ibit++){
bits[ibit]='0'+((isrc>>(sizeof(int)*CHAR_BIT-ibit-1))&0x01);
}
bits[sizeof(int)*CHAR_BIT]=0;
return bits;
}
int main(){
char bits[sizeof(int)*CHAR_BIT+1];
printf("%s\n",bitstr(1,bits));
printf("%s\n",bitstr(0x80000000,bits));
printf("%s",bitstr(0x80000002,bits));
return 0;
}
复制代码
作者:
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