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

        

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


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

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

 

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



  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值