进制问题几乎是刚入门计算机时学的东西,即便如此,你知道进制之间是如何转换的吗?下面就来详细说明各进制之间的转换原理。
(一)二、八、十六进制转十进制
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
今天暂时写这么多,有时间把其他两种进制的转换补上。