码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-11-06 17:32:37      阅读:219      评论:0      收藏:0      [点我收藏+]

标签: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));
}


bubuko.com,布布扣


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


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

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

 

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



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

标签:c   算法   二进制   

原文地址:http://blog.csdn.net/cnshsh/article/details/40711947

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!