进制转换算法的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

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

时间: 2024-10-13 04:29:15

进制转换算法的C语言实现的相关文章

任意进制转换算法

任意进制转换算法 N年没有写博客,发个进制转换的玩下,支持负数:功能属于简化版的 Convert.ToInt32 ,特点是: 1.任意位,如:0,1(二进制),0...7(八进制),0...9,A...F(16进制),0...N(N进制),或者是:[email protected]#$%^&*(8进制,字符符号),也可以是中文. 2.8 byte 最大长度. 3.C#源码. 最近写markdown格式习惯啦,cnblogs啥时候全改掉算了,别用这个htmleditor算了. 先说明下进制转换的基

lua之m进制转换为n进制-任意进制转换算法

够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 1 --数组倒序排列 2 local function orderByDesc( input ) 3 local output = {} 4 local count = #input 5 while count > 0 do 6 table.insert(output, input[count] ) 7 count = count -1 8 end 9 return output 10 end 11 12 --

ex5.“栈”+进制转换算法

#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #include<stdio.h> #include<stdlib.h> typedef int SElemType; typedef struct{ SElemType *base,*top; int stacksize; }SqStack; int InitStack(SqStack &S) { S.base = (SElemType*)malloc(sizeof

进制转换算法

package com.lk.C; import java.util.Stack; public class Test3 { public static String getBinary(int decimal){ Stack<Integer> stack = new Stack<Integer>(); while(decimal != 0){ stack.push(decimal % 2);//向栈中增加余数 decimal = decimal / 2;//获得新商 } Stri

06 python语言中的进制转换

python语言中的进制转换 1.python语言中支持哪些进制,以及这些进制的表示法2.如何在不同的进制之间进行转换 //py 语言支持4种进制 十进制 0-9 // 123 默认就是 十进制 十六进制 0-9 A-F //0x 0xFF12E 0x 开头的就是 十六进制二进制 //0b 0b11010101 //这里用0B 也是可以的但是业内都是用小写的0b表示 表示二进制 八进制 //0o 0o4324 // 0o 开头的就是 八进制 除了十进制外,其他进制数字前面都是0 转换 主要是十进

C# 进制转换 (没有数值的长度限制)

曾经在大学时做过一个c的进制转换算法,那时由于技术的局限性,数值的大小受到限制(系统数据类型长度限制),多年以后,自己那台学习机陈旧后感觉要报废了,整理了一下里面的东西,偶尔在一个角落里发现了这个转换算法,觉得它还有改进的地方,可以让它功能更强大(当时想过要转换超长数值,但受系统数据类型的局限性.个人开发语言深度的认知.以及视界观的狭隘,没能想到可以解决计算超长数据的有效的方法),这里我会将多年前大学里写的那段,和我修改后的粘贴出来,以飨读者. 传入参数: string x 是超大数的字符串格式

一起talk C栗子吧(第七回:C语言实例--进制转换)

各位看官们.大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是生成随机数的样例.这一回咱们说的样例是:进制转换.说到进制预计大家 都不陌生.计算机中的进制有二进制.八进制,十进制,十六进制. 今天咱们将要说的是十进制怎样转换成二进制.八进制和十六进制.在这里我把敲代码的步骤和算法思路 写出来供大家參考. 1.获取用户想要转换的数值和想到转换的进制.这里要检查输入是否正确.这是程序健壮性的体现

1158: 零起点学算法65——进制转换

1158: 零起点学算法65--进制转换 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 1068  Accepted: 615[Submit][Status][Web Board] Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). Output

2.4.2-Java语言基础(进制转换)

二进制转成十进制 八进制.十六进制转成十进制 二进制转成八进制.十六进制 八进制.十六进制转成二进制 八进制转成十六进制 十六进制转成八进制 十进制转成二进制.八进制.十六进制 ?  负数的二进制表现形式 ?  对应的正数二进制取反加1 2.4.2-Java语言基础(进制转换)