首页 各进制数之间的转换原理及C程序代码

各进制数之间的转换原理及C程序代码

举报
开通vip

各进制数之间的转换原理及C程序代码进制转换    一、正数 在高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问题。今天我就给大家讲讲与计算机有关的“进制转换”问题。 我们以(25.625)(十)为例讲解一下进制之间的转化问题 说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看    1. 十 -----> 二    (25.625)(十)   整数部分:   25/2=12......1   12/2=6 ......0   6/2=3 ......0 ...

各进制数之间的转换原理及C程序代码
进制转换    一、正数 在高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 。今天我就给大家讲讲与计算机有关的“进制转换”问题。 我们以(25.625)(十)为例讲解一下进制之间的转化问题 说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看    1. 十 -----> 二    (25.625)(十)   整数部分:   25/2=12......1   12/2=6 ......0   6/2=3 ......0   3/2=1 ......1   1/2=0 ......1   然后我们将余数按从下往上的顺序书写就是:11001,那么这个11001就是十进制25的二进制形式   小数部分:   0.625*2=1.25   0.25 *2=0.5   0.5 *2=1.0   然后我们将整数部分按从上往下的顺序书写就是:101,那么这个101就是十进制0.625的二进制形式   所以:(25.625)(十)=(11001.101)(二)   十进制转成二进制是这样:   把这个十进制数做二的整除运算,并将所得到的余数倒过来.   例如将十进制的10转为二进制是这样:   (1) 10/2,商5余0;   (2) 5/2,商2余1;   (3)2/2,商1余0;   (4)1/2,商0余1.   (5)将所得的余数侄倒过来,就是1010,所以十进制的10转化为二进制就是1010    2. 二 ----> 十    (11001.101)(二)   整数部分: 下面的出现的2(x)表示的是2的x次方的意思   1*2(4)+1*2(3)+0*2(2)+0*2(1)+1*2(0)=25   小数部分:   1*2(-1)+0*2(-2)+1*2(-3)=0.625   所以:(11001.101)(二)=(25.625)(十)   二进制转化为十进制是这样的:   这里可以用8421码的方法.这个方法是将你所要转化的二进制从右向左数,从0开始数(这个数我们叫N),在位数是1的地方停下,并将1乘以2的N次方,最后将这些1乘以2的N次方相加,就是这个二进数的十进制了.   还是举个例子吧:   求110101的十进制数.从右向左开始了   (1) 1乘以2的0次方,等于1;   (2) 1乘以2的2次方,等于4;   (3) 1乘以2的4次方,等于16;   (4) 1乘以2的5次方,等于32;   (5) 将这些结果相加:1+4+16+32=53    3. 十 ----> 八    (25.625)(十)   整数部分:   25/8=3......1   3/8 =0......3   然后我们将余数按从下往上的顺序书写就是:31,那么这个31就是十进制25的八进制形式   小数部分:   0.625*8=5   然后我们将整数部分按从上往下的顺序书写就是:5,那么这个0.5就是十进制0.625的八进制形式   所以:(25.625)(十)=(31.5)(八)    4. 八 ----> 十    (31.5)(八)   整数部分:   3*8(1)+1*8(0)=25   小数部分:   5*[8(-1)]=0.625   所以(31.5)(八)=(25.625)(十)    5. 十 ----> 十六    (25.625)(十)   整数部分:   25/16=1......9   1/16 =0......1   然后我们将余数按从下往上的顺序书写就是:19,那么这个19就是十进制25的十六进制形式   小数部分:   0.625*16=10(即十六进制的A或a)   然后我们将整数部分按从上往下的顺序书写就是:A,那么这个A就是十进制0.625的十六进制形式   所以:(25.625)(十)=(19.A)(十六)    6. 十六----> 十    (19.A)(十六)   整数部分:   1*16(1)+9*16(0)=25   小数部分:   10*16(-1)=0.625 (10代表A)   所以(19.A)(十六)=(25.625)(十)   如何将带小数的二进制与八进制、十六进制数之间的转化问题   我们以(11001.101)(二)为例讲解一下进制之间的转化问题   说明:小数部份的转化计算机二级是不考的,有兴趣的人可以看一看    7. 二 ----> 八    (11001.101)(二)   整数部分: 从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:   001=1   011=3   然后我们将结果按从下往上的顺序书写就是:31,那么这个31就是二进制11001的八进制形式   小数部分: 从前往后每三位一组,缺位处用0填补,然后按十进制方法进行转化, 则有:   101=5   然后我们将结果部分按从上往下的顺序书写就是:5,那么这个5就是二进制0.101的八进制形式   所以:(11001.101)(二)=(31.5)(八)    8. 八 ----> 二    (31.5)(八)   整数部分:从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:   1---->1---->001   3---->11   然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式   说明,关于十进制的转化方式我这里就不再说了,上一篇文章我已经讲解了!   小数部分:从前往后每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 则有:   5---->101   然后我们将结果按从下往上的顺序书写就是:101,那么这个101就是八进制5的二进制形式   所以:(31.5)(八)=(11001.101)(二)    9. 十六 ----> 二    (19.A)(十六)   整数部分:从后往前每位按十进制转换成四位二进制数,缺位处用0补充 则有:   9---->1001   1---->0001(相当于1)   则结果为00011001或者11001   小数部分:从前往后每位按十进制转换成四位二进制数,缺位处用0补充 则有:   A(即10)---->1010   所以:(19.A)(十六)=(11001.1010)(二)=(11001.101)(二)    10. 二 ----> 十六    (11001.101)(二)   整数部分:从后往前每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:   1001---->9   0001---->1   则结果为19   小数部分:从前往后每四位按十进制转化方式转化为一位数,缺位处用0补充 则有:   1010---->10---->A   则结果为A   所以:(11001.101)(二)=(19.A)(十六) 二、负数   负数的进制转换稍微有些不同。   先把负数写为其补码形式(在此不议),然后再根据二进制转换其它进制的方法进行。   例:要求把-9转换为八进制形式。则有:   -9的补码为11110111。然后三位一划   111---->7   110---->6   011---->3   然后我们将结果按从下往上的顺序书写就是:367,那么367就是十进制数-9的八进制形式。   补充:   最近有些朋友提了这样的问题“0.8的十六进制是多少?”   我想在我的空间里已经有了详细的讲解,为什么他还要问这样的问题那   于是我就动手算了一下,发现0.8、0.6、0.2... ...一些数字在进制之间的转化   过程中确实存在麻烦。   就比如“0.8的十六进制”吧!   无论你怎么乘以16,它的余数总也乘不尽,总是余8   这可怎么办啊,我也没辙了   第二天,我请教了我的老师才知道,原来这么简单啊!   具体方法如下:   0.8*16=12.8   0.8*16=12.8   .   .   .   .   .   取每一个结果的整数部分为12既十六进制的C   如果题中要求精确到小数点后3位那结果就是0.CCC   如果题中要求精确到小数点后4位那结果就是0.CCCC   现在OK了,我想我的朋友再也不会因为进制的问题烦愁了!   下面是将十进制数转换为负R进制的公式:   N=(dmdm-1...d1d0)-R   =dm*(-R)^m+dm-1*(-R)^m-1+...+d1*(-R)^1+d0*(-R)^0   15=1*(-2)^4+0*(-2)^3+0*(-2)^2+1*(-2)^1+1*(-2)^0   =10011(-2)   其实转化成任意进制都是一样的 C程序代码:(支持负进制)   #include   #include   main()   {   long n,m,r;   while( scanf( "%ld%ld",&n,&r)!=EOF){   if (abs(r)> 1 && !(n <0 && r> 0)){   long result[100];   long *p=result;   printf( "%ld=",n);   if (n!=0){   while(n!=0){   m=n/r;*p=n-m*r;   if (*p <0 && r <0){   *p=*p+abs(r);m++;   }   p++;n=m;   }   for (m=p-result-1;m>=0;m--){   if (result[m]> 9)   printf( "%c",55+result[m]);   else   printf( "%d",result[m]);   }   }   else printf( "0");   printf( "(base%d)\n",r);   } }   return 0;   }   以下为10进制以下转换。。。   用函数,可直接拷贝。。。   #include   int x[100];   int jzzh(int y,int ml)   {   int i,j;   i=ml;   int a;   x[0]=0;   for(a=1;;a++)   {   j=i%y;   if(i!=0)   {   x[a]=j;   x[0]++;   }   else   break;   i=i/y;   }   }   int main()   {   long int y,ml;   long int a;   printf("请输入需要转换至进制数:");   scanf("%d",&y);   printf("请输入数字:");   scanf("%d",&ml);   jzzh(y,ml);   for(a=x[0];a>=1;a--)   printf("%d",x[a]);   printf("\n");   system("pause");   } 上面记得住就行了.多少进制转化为2进制的方法 如果你记不得,你应该会十进制变为二进制吧!你只要把它成三位,一位或两位前面加0就可以了. 如:十进制2变成二进制就是10,然后就在前面加0,变为010就行了. 十六转二进制,是同样的道理,就是十到十五时,就会为A、B、C ..F,但是一样,只要你知道十进制变为二进制就行了.不足四位就前面加0,变成四位. 如:十进制是10变为二进制就是1010,十六是A变为二时制也就是1010
本文档为【各进制数之间的转换原理及C程序代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_490540
暂无简介~
格式:doc
大小:43KB
软件:Word
页数:7
分类:工学
上传时间:2013-04-08
浏览量:162