(完整word版)进制转换C语言的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) /*进栈*/
{