进制转换算法的C语言实现

来源:互联网 发布:轩辕网络新三板股票 编辑:程序博客网 时间:2024/04/28 01:58

        

进制问题几乎是刚入门计算机时学的东西,即便如此,你知道进制之间是如何转换的吗?下面就来详细说明各进制之间的转换原理。


(一)二、八、十六进制转十进制

2、8、16转10有一个通用的算法,就是用各位上的数乘以本进制的基数的n次幂(n为本位数后面的位数)求值后相加所得。有点绕口是吧?语文没学好,请谅解,下面举个例就懂了。

Eg:100002=?10

这是将二进制的10000转换成十进制,从左往右看,第一位是1,后面位数都是0,那就是:

1*24+0*23+0*22+0*21+0*20=16+0+0+0+0=16

24中的2就是基数,最后相加的和就是十进制。

Eg:57458= ?10

还是按照上面的算法来:

5*83+7*82+4*81+5*80=3045

是不是明白点了?来看下十六进制,与以上两个不同的是,十六进制中带有字母,不难理解,碰见A就把它替换成10,碰见B就替换成11,以此类推直到F,还是来看例子,随便写个数字(真的是随手写的,不信你问我键盘o(^▽^)o):

Eg:2435DE16=?10

2*165+4*164+3*163+5*162+13*161+14*160=2373086

代码:


//二进制转十进制 /*博客:http://blog.csdn.net/cnshsh */ #include <stdio.h>#include <stdlib.h> //itoa()函数所在头文件 #include <string.h>int Binary2Decimal(int b){char s[100];int re = 0,i,n;itoa(b,s,10);//将传进来的二进制数以字符串的形式存储n = strlen(s) - 1;for (i=n; i>=0; i--)re += s[i]-48<<n-i; return re;}int main(){printf("%d\n",Binary2Decimal(1011));}




(二)十进制转二、八、十六进制


这个不用多说,当然也有自己的通用算法了,用十进制数除以其他进制的基数,将余数逆向排序,来看下例子

Eg:1010= ?2

10 / 2 =5 ······ 0

5 / 2 = 2 ······ 1

2 / 2 = 1 ······ 0

1 / 2 = 0 ······ 1

最后倒序写成:1010

Eg:8310= ?8

83 / 8 = 10 ······ 3

10 / 8 = 1 ······ 2

1 / 8 = 0 ······ 1

倒序:123

Eg:29910= ?16

299 / 16 = 18 ······ 11

18 / 16 = 1 ······ 2

1 / 16 = 0 ······ 1

倒序写时超过9的就用字母代替,比如这个11就用B代替:12B

 

今天暂时写这么多,有时间把其他两种进制的转换补上。



0 0
原创粉丝点击