完整word版进制转换C语言的实现docxWord文档下载推荐.docx
《完整word版进制转换C语言的实现docxWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整word版进制转换C语言的实现docxWord文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
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
7*8^0=7
0*8^1=0
5*8^2=320
1*8^3=512
所以换算成十进制:
7+0+320+512=839八进制转十六进制:
八进制转换成十六进制:
有两种方法:
一种是先将八进制转换成二进制,在将二进制转换成十六进制。
另一种方法是将八进制转换成十进制,在将十进制转换成十六进制。
十六进制转二进制:
上面已经提到二进制转换成十六进制的方法,记住8421,每一位的权值,所以十六进制转成二进制就是一段四位分别转成二进制。
F1111,D1101,A1010,50101十六进制转八进制:
十六进制转八进制也不能直接转换,需要将十六进制转换成十进制或者二进制,才能由十进制或者二进制转换成八进制。
十六进制转十进制:
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
5*16^0=5
F*16^1=240
A*16^3=2560
2*16^4=8192
所以转换成十进制数为:
10997.
栈:
头文件“stack.h”
#include<
stdio.h>
stdlib.h>
typedefenum{FALSE,TRUE}Bool;
typedefintElementType;
typedefstruct
{
inttop;
ElementType*elements;
intMaxSize;
}Stack;
voidInitStack(Stack*,intsz);
voidFreeStack(Stack*);
intPush(Stack*,ElementType);
ElementTypePop(Stack*);
ElementTypeGetTop(Stack*);
voidMakeEmepty(Stack*);
BoolIsEmpty(Stack*S);
BoolIsFull(Stack*S);
栈的关键操作
:
#include"
stack.h"
BoolIsEmpty(Stack*S)
/*判断栈是否为空
*/
return(Bool)(S->
top==-1);
}
创建栈空间,生成
一个空栈*/
S->
MaxSize=sz;
elements=(ElementType*)malloc(sizeof(ElementType)*S-
>
MaxSize);
top=-1;
intPush(Stack*S,ElementTypeitem)
/*进栈*/
if(!
IsFull(S))
elements[++(S->
top)]=item;
return0;
elsereturn-1;
ElementTypePop(Stack*S)
/*出栈*/
IsEmpty(S))
returnS->
elements[(S->
top)--];
else
printf("
stackisempty!
\n"
);
exit
(1);
关键程序:
/*十进制进制转换为其它
voidShiSl(longn,intt)
{inti=0,x;
charSl[100];
Stack*S=(Stack*)malloc(sizeof(Stack));
InitStack(S,100);
while(n>
0)
Push(S,n%t);
//关键句
n/=t;
while(!
{x=Pop(S);
if(x<
10)
Sl[i++]=x+'
0'
;
Sl[i++]=x-10+'
a'
Sl[i]='
\0'
其%d进制数为:
\n"
t);
puts(Sl);
voidmain()
{intt;
longshu;
请输要转化为几进:
scanf("
%d"
&
t);
请输入一个整数:
%ld"
shu);
ShiSl(shu,t);
/*其它进制转换为十进制*/
{charc,Y[100];
intn,i=0,k,j=0;
longT=0;
请输入该数的进制数:
scanf("
n);
请输该数位数:
k);
fflush(stdin);
for(i=0;
i<
k;
i++)
请输该数第%d:
++j);
c);
Y[i]=c;
Y[i]='
Y[i]!
='
if(Y[i]>
0&
&
Y[i]<
9)
T=T*n+Y[i];
'
A'
Y[i]<
Z'
)
T=T*n+Y[i]-'
z'
{printf("
输入有误!
"
exit
(1);
该数的十进制为:
T);