(完整word版)进制转换C语言的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

索引

一、算法分析

二、数据结构:

1、头文件

2、栈的关键操作

三、关键程序:

1、十进制进制转换为其它

2、其它进制转换为十进制

一、算法分析

实现进制转换需要编个函数,每一函数完成相应进制的转换,下面是各个进制之间转换的数学方法的算法。

十进制转二进制:

十进制数转换成二进制数,是一个连续除2的过程;把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0.最后将所有余数倒序排列,得到数就是转换结果。

例如:

302/2 = 151 余0

151/2 = 75 余1

75/2 = 37 余1

37/2 = 18 余1

18/2 = 9 余0

9/2 = 4 余1

4/2 = 2 余0

2/2 = 1 余0

所以302转换为2进制,结果:100101110

十进制转八进制:

十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:除数由2变成8。

例如:

120/8=15余0

15/8=1余7

1/8=0余1

所以120转换为8进制,结果为:170

十进制转十六进制:

十进制数转换成十六进制数的方法和转换为二进制的方法类似,唯一变化:除数由2变成16。

不过,十六进制数:(10~15)是用英文大写字母(A~F)表示。例如:

123/16=7余11

所以123转换为16进制,结果为:7B

二进制转十进制:

二进制数转换为十进制数按权展开,第0位的权值是2的0

次方,第1位的权值是2的1次方··

例如:

1010转换成十进制数:

第0位:0*2^0=0

第1位:1*2^1=2

第2位:0*2^2=0

第3位:1*2^3=8

所以转换为10进制数为:0+2+0+8=10

二进制转八进制:

利用421,从后往前每三位一组,缺位除补0,然后按十进制方法进行转换。

例如:

(11001)

001=1

011=3

然后将结果按从下往上顶顺序书写:31

二进制转十六进制:

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算;利用8421,对于任意一个4位的二进制数,都可以很快算出它对应的10进制值。

例如:

1111=8+4+2+1=15

又因为十六进制数:10~15用大写字母A~F表示,所以15为F。

八进制转二进制:

利用421;从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化;

例如:

1—>001

3- 011

然后我们将结果按从下往上的顺序书写就是:11001,那么这个11001就是八进制31的二进制形式。

八进制转十进制:

八进制就是逢8进1,八进制数采用0~7这八数来表达一个数;八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

例如:

1507

第0位:7*8^0=7

第1位:0*8^1=0

第2位:5*8^2=320

第3位:1*8^3=512

所以换算成十进制:7+0+320+512=839

八进制转十六进制:

八进制转换成十六进制:有两种方法:一种是先将八进制转换成二进制,在将二进制转换成十六进制。另一种方法是将八进制转换成十进制,在将十进制转换成十六进制。

十六进制转二进制:

上面已经提到二进制转换成十六进制的方法,记住8421,每一位的权值,所以十六进制转成二进制就是一段四位分别转成二进制。

例如:F→1111 ,D→1101,A→1010,5→0101

十六进制转八进制:

十六进制转八进制也不能直接转换,需要将十六进制转换成十进制或者二进制,才能由十进制或者二进制转换成八进制。

十六进制转十进制:

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方··

所以,在第N(N从0开始)位上,如果是是数X (X 大于等于0,并且X小于等于15,即:F)表示的大小为X * 16的N次方。

例如:

2AF5

第0位:5*16^0=5

第1位:F*16^1=240

第2位:A*16^3=2560

第3位:2*16^4=8192

所以转换成十进制数为:10997.

二、数据结构:

栈:

头文件“stack.h”

#include

#include

typedef enum{FALSE,TRUE} Bool; typedef int ElementType; typedef struct

{

int top;

ElementType*elements;

int MaxSize;

}Stack;

void InitStack(Stack*,int sz);

void FreeStack(Stack*);

int Push(Stack*,ElementType);

ElementType Pop(Stack*);

ElementType GetTop(Stack*);

void MakeEmepty(Stack*);

Bool IsEmpty(Stack*S);

Bool IsFull(Stack*S);

栈的关键操作:

#include"stack.h"

Bool IsEmpty(Stack*S) /*判断栈是否为空*/ {

return(Bool)(S->top==-1);

}

void InitStack(Stack*S,int sz) /*创建栈空间,生成一个空栈*/

{

S->MaxSize=sz;

S->elements=(ElementType*)malloc(sizeof(ElementType)*S->MaxSize);

S->top=-1;

}

int Push(Stack*S,ElementType item) /*进栈*/

{

相关文档
最新文档