为了账号安全,请及时绑定邮箱和手机立即绑定

C语言中如何用算法实现进制间的转化?

C语言中如何用算法实现进制间的转化?

C
慕容708150 2018-11-20 15:19:59
C语言中如何用算法实现进制间的转化?
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

说明:如18的二进制代码为:10010(用除2法算得). 18/2=9 余 0 9/2=4 余 1 4/2=2 余 0 2/2=1 余 0 1/2=0 余 1 (当除得的结果为0时,只需将所有的余数从上往上连在一起,就组成了18的二进制代码:10010) 如果要转换为8进制数,即用3个二进制位就可以表示一个8进制数,为了方便计算,我们在某些位上进行截止计算,如18我们就截取表示成10,010(“,”前的用逐位乘2法算得,当遇上“,”时乘10再用乘2法算得。),所以18的8进制表示为(1*2+0)*10+(0*2+1)*2+0=22(0)。对于16进制只要4个二进制就能表示一位16进制数,如18的截取表示为1,0010,16进制表示为 1*10+((0*2+0)*2+1)*2+0=12(h)。 #include "stdio.h" void main(){ int num,rlt,temp; int j,i,k; int ch1[30]; scanf("输入一个十进制数:%d",num);//输入一个十进制数num i=num; for(j=0;i>0;j++){//输出二进制数组 ch1[j]=i%2; i=i/2; } for(i=0,2*i<j,i++){//倒置得出正确的二进制代码 temp=ch1[i]; ch1[i]=ch1[j-i]; ch1[j-i]=temp; } do{ scanf("输入要输出的进制:%d",i);//输入要转换的进制数i }while(i!=2||i!=8||i!=16); if (i==8) k=3;//计算要所选进制所允许截取的最大位数k if (i==16) k=4; temp=0; rlt=0; for(i=0,i<j,i++){ if(i<j%k||(i-j%k)%k>0){ temp=temp*2+ch1[i];break; } if(i==j%k||(i-j%k)%k==0){//进行分位点的计算 temp=temp*2+ch1[i];rlt=rlt*10+temp;temp=0;break; } } if (k==3) i=8; else if(k==4) i=16; else i=2; printf("%d的%d进制代码为:%d",num,i,rlt); }



查看完整回答
反对 回复 2018-12-11
  • 1 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信