
用c语言编程,进制转换的实现
不仅要有十进制转化为其他进制(二进制,八进制,十六进制)且还要有自定义进制转换。。。谢谢!!!希望给点速度。。。。。还要附有流程图!!!...
不仅要有十进制转化为其他进制(二进制,八进制,十六进制)且还要有自定义进制转换。。。谢谢!!!希望给点速度。。。。。还要附有流程图!!!
展开
4个回答
展开全部
可以用直接法和间接法转换。
1、(1)间接法:先将十进制转换成二进制,然后将二进制又转换成八进制。
(2)直接法:八进制是由二进制衍生而来的,因此可以采用与十进制转换为二进制相类似的方法,还是整数部分的转换和小数部分的转换,下面来具体讲解一下:
①整数部分
方法:除8取余法,即每次将整数部分除以8,余数为该位权上的数,而商继续除以8,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数起,一直到最前面的一个余数。
②小数部分
方法:乘8取整法,即将小数部分乘以8,然后取整数部分,剩下的小数部分继续乘以8,然后取整数部分,剩下的小数部分又乘以8,一直取到小数部分为零为止。如果永远不能为零,就同十进制数的四舍五入一样,暂取个名字叫3舍4入。
2、十进制的转换到十六进制:
十六进制与八进制有很多相似之处,可以参照上面八进制与十进制的转换实现这两个进制之间的转换。
展开全部
输入一个十进制数N,将它转换成R进制数输出,这里假设最大为十六进制。
#include <stdio.h>
int exchange(int a)
{
if(a == 10){printf("A");return 0;}
if(a == 11){printf("B");return 0;}
if(a == 12){printf("C");return 0;}
if(a == 13){printf("D");return 0;}
if(a == 14){printf("E");return 0;}
if(a == 15){printf("F");return 0;}
printf("%d",a);
}
int main(int argc, char *argv[])
{
int x,y,i,j,a[110];
while(scanf("%d%d",&x,&y) == 2)//输入x,y,x为十进制数,y为要转换的进制
{
if(x < 0){printf("-"); x = -x;}//如果x小于零,转换成正数再计算,然后先把负号输出
if(x == 0){printf("0");return 0;}
for(i = 0;x != 0;i++)//一下为十进制转换成其他进制的基本规则
{
a[i] = x % y;
x = x / y;
}
i--;
if(y > 10)//如果要转换的进制大于十进制,要特别处理。
for(j = i;j >= 0;j--)
exchange(a[j]);
else for(j = i;j >= 0;j--)
printf("%d",a[j]);
printf("\n");
}
return 0;
}
#include <stdio.h>
int exchange(int a)
{
if(a == 10){printf("A");return 0;}
if(a == 11){printf("B");return 0;}
if(a == 12){printf("C");return 0;}
if(a == 13){printf("D");return 0;}
if(a == 14){printf("E");return 0;}
if(a == 15){printf("F");return 0;}
printf("%d",a);
}
int main(int argc, char *argv[])
{
int x,y,i,j,a[110];
while(scanf("%d%d",&x,&y) == 2)//输入x,y,x为十进制数,y为要转换的进制
{
if(x < 0){printf("-"); x = -x;}//如果x小于零,转换成正数再计算,然后先把负号输出
if(x == 0){printf("0");return 0;}
for(i = 0;x != 0;i++)//一下为十进制转换成其他进制的基本规则
{
a[i] = x % y;
x = x / y;
}
i--;
if(y > 10)//如果要转换的进制大于十进制,要特别处理。
for(j = i;j >= 0;j--)
exchange(a[j]);
else for(j = i;j >= 0;j--)
printf("%d",a[j]);
printf("\n");
}
return 0;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[C语言]关于2 8 10 16进制转换方法2007-08-07 0:41一)、数制
计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。
一般计数都采用进位计数,其特点是:
(1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。
(2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。
在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1
8 4 2 1
二)、数制转换
不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。
有四进制
十进制:有10个基数:0 ~~ 9 ,逢十进一
二进制:有2 个基数:0 ~~ 1 ,逢二进一
八进制:有8个基数:0 ~~ 7 ,逢八进一
十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一
1、数的进位记数法
N=a n-1*p n-1+a n-2*p n-2+…+a2*p2+a1*p1+a0*p0
2、十进制数与P进制数之间的转换
①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。
将(30)10转换成二进制数
2| 30 ….0 ----最右位
2 15 ….1
2 7 ….1
2 3 ….1
1 ….1 ----最左位
∴ (30)10=(11110)2
将(30)10转换成八、十六进制数
8| 30 ……6 ------最右位
3 ------最左位
∴ (30)10 =(36)8
16| 30 …14(E)----最右位
1 ----最左位
∴ (30)10 =(1E)16
3、将P进制数转换为十进制数
把一个二进制转换成十进制采用方法:把这个二进制的最后一位乘上20,倒数第二位乘上21,……,一直到最高位乘上2n,然后将各项乘积相加的结果就它的十进制表达式。
把二进制11110转换为十进制
(11110)2=1*24+1*23+1*22+1*21+0*20=
=16+8+4+2+0
=(30)10
把一个八进制转换成十进制采用方法:把这个八进制的最后一位乘上80,倒数第二位乘上81,……,一直到最高位乘上8n,然后将各项乘积相加的结果就它的十进制表达式。
把八进制36转换为十进制
(36)8=3*81+6*80=24+6=(30)10
把一个十六进制转换成十进制采用方法:把这个十六进制的最后一位乘上160,倒数第二位乘上161,……,一直到最高位乘上16n,然后将各项乘积相加的结果就它的十进制表达式。
把十六制1E转换为十进制
(1E)16=1*161+14*160=16+14=(30)10
3、二进制转换成八进制数
(1)二进制数转换成八进制数:对于整数,从低位到高位将二进制数的每三位分为一组,若不够三位时,在高位左面添0,补足三位,然后将每三位二进制数用一位八进制数替换,小数部分从小数点开始,自左向右每三位一组进行转换即可完成。例如:
将二进制数1101001转换成八进制数,则
(001 101 001)2
| | |
( 1 5 1)8
( 1101001)2=(151)8
(2)八进制数转换成二进制数:只要将每位八进制数用三位二进制数替换,即可完成转换,例如,把八进制数(643.503)8,转换成二进制数,则
(6 4 3 . 5 0 3)8
| | | | | |
(110 100 011 . 101 000 011)2
(643.503)8=(110100011.101000011)2
4、二进制与十六进制之间的转换
(1)二进制数转换成十六进制数:由于2的4次方=16,所以依照二进制与八进制的转换方法,将二进制数的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始自左向右每四位一组进行转换。
(2)十六进制转换成二进制数
如将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。
例如:将(163.5B)16转换成二进制数,则
( 1 6 3 . 5 B )16
| | | | |
(0001 0110 0011. 0101 1011 )2
(163.5B)16=(101100011.01011011)2
二、八、十六进制转换成十进制数。2.8.16--10
方法:按权展开相加、将整数部分和小数部分按转换方法分别转换。
十进制整数转换成二、八、十六进制整数。10--2.8.16(整数)
方法:除N取余,倒向取数。
十进制小数转换成二、八、十六进制小数。10--2.8.16(小数)
方法:乘N取整,正向取数。整数部分按整数转换原则,小数部分按小数转换原则,分别进行转换。
二进制数与八、十六进制数的互相转换。
方法:采用8421法。一位8进制数正好表示3位2进制数。一位16进制数正好表示4位2进制数。2--8方法:以小数点为界,向左右每3位分成一组,不够补零。2--16方法:以小数点为界,向左右每4位分成一组,不够补零。
八、十六进制数转换成二进制数。8.16--2
方法:将每一位8进制、16进制的数分为3个、4个二进制数(逆过程)。
八进制数转换成十六进制数。8--16
方法:把2进制当做桥梁,先把八进制数转换成二进制数,再把二进制数转换成十六进制数。
计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用八、十六进制作为二进制的缩写。
一般计数都采用进位计数,其特点是:
(1)逢N进一,N是每种进位计数制表示一位数所需要的符号数目为基数。
(2)采用位置表示法,处在不同位置的数字所代表的值不同,而在固定位置上单位数字表示的值是确定的,这个固定位上的值称为权。
在计算机中:D7 D6 D5 D4 D3 D2 D1 D0 只有两种0和1
8 4 2 1
二)、数制转换
不同进位计数制之间的转换原则:不同进位计数制之间的转换是根据两个有理数如相等,则两数的整数和分数部分一定分别相等的原则进行的。也就是说,若转换前两数相等,转换后仍必须相等。
有四进制
十进制:有10个基数:0 ~~ 9 ,逢十进一
二进制:有2 个基数:0 ~~ 1 ,逢二进一
八进制:有8个基数:0 ~~ 7 ,逢八进一
十六进制:有16个基数:0 ~~ 9,A,B,C,D,E,F (A=10,B=11,C=12,D=13,E=14,F=15) ,逢十六进一
1、数的进位记数法
N=a n-1*p n-1+a n-2*p n-2+…+a2*p2+a1*p1+a0*p0
2、十进制数与P进制数之间的转换
①十进制转换成二进制:十进制整数转换成二进制整数通常采用除2取余法,小数部分乘2取整法。例如,将(30)10转换成二进制数。
将(30)10转换成二进制数
2| 30 ….0 ----最右位
2 15 ….1
2 7 ….1
2 3 ….1
1 ….1 ----最左位
∴ (30)10=(11110)2
将(30)10转换成八、十六进制数
8| 30 ……6 ------最右位
3 ------最左位
∴ (30)10 =(36)8
16| 30 …14(E)----最右位
1 ----最左位
∴ (30)10 =(1E)16
3、将P进制数转换为十进制数
把一个二进制转换成十进制采用方法:把这个二进制的最后一位乘上20,倒数第二位乘上21,……,一直到最高位乘上2n,然后将各项乘积相加的结果就它的十进制表达式。
把二进制11110转换为十进制
(11110)2=1*24+1*23+1*22+1*21+0*20=
=16+8+4+2+0
=(30)10
把一个八进制转换成十进制采用方法:把这个八进制的最后一位乘上80,倒数第二位乘上81,……,一直到最高位乘上8n,然后将各项乘积相加的结果就它的十进制表达式。
把八进制36转换为十进制
(36)8=3*81+6*80=24+6=(30)10
把一个十六进制转换成十进制采用方法:把这个十六进制的最后一位乘上160,倒数第二位乘上161,……,一直到最高位乘上16n,然后将各项乘积相加的结果就它的十进制表达式。
把十六制1E转换为十进制
(1E)16=1*161+14*160=16+14=(30)10
3、二进制转换成八进制数
(1)二进制数转换成八进制数:对于整数,从低位到高位将二进制数的每三位分为一组,若不够三位时,在高位左面添0,补足三位,然后将每三位二进制数用一位八进制数替换,小数部分从小数点开始,自左向右每三位一组进行转换即可完成。例如:
将二进制数1101001转换成八进制数,则
(001 101 001)2
| | |
( 1 5 1)8
( 1101001)2=(151)8
(2)八进制数转换成二进制数:只要将每位八进制数用三位二进制数替换,即可完成转换,例如,把八进制数(643.503)8,转换成二进制数,则
(6 4 3 . 5 0 3)8
| | | | | |
(110 100 011 . 101 000 011)2
(643.503)8=(110100011.101000011)2
4、二进制与十六进制之间的转换
(1)二进制数转换成十六进制数:由于2的4次方=16,所以依照二进制与八进制的转换方法,将二进制数的每四位用一个十六进制数码来表示,整数部分以小数点为界点从右往左每四位一组转换,小数部分从小数点开始自左向右每四位一组进行转换。
(2)十六进制转换成二进制数
如将十六进制数转换成二进制数,只要将每一位十六进制数用四位相应的二进制数表示,即可完成转换。
例如:将(163.5B)16转换成二进制数,则
( 1 6 3 . 5 B )16
| | | | |
(0001 0110 0011. 0101 1011 )2
(163.5B)16=(101100011.01011011)2
二、八、十六进制转换成十进制数。2.8.16--10
方法:按权展开相加、将整数部分和小数部分按转换方法分别转换。
十进制整数转换成二、八、十六进制整数。10--2.8.16(整数)
方法:除N取余,倒向取数。
十进制小数转换成二、八、十六进制小数。10--2.8.16(小数)
方法:乘N取整,正向取数。整数部分按整数转换原则,小数部分按小数转换原则,分别进行转换。
二进制数与八、十六进制数的互相转换。
方法:采用8421法。一位8进制数正好表示3位2进制数。一位16进制数正好表示4位2进制数。2--8方法:以小数点为界,向左右每3位分成一组,不够补零。2--16方法:以小数点为界,向左右每4位分成一组,不够补零。
八、十六进制数转换成二进制数。8.16--2
方法:将每一位8进制、16进制的数分为3个、4个二进制数(逆过程)。
八进制数转换成十六进制数。8--16
方法:把2进制当做桥梁,先把八进制数转换成二进制数,再把二进制数转换成十六进制数。
追问
给编个程序啊,,还可以追加分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
10进制d转换为n进制,就用d/n,如果结果>0,就是相应的n进制的数字,这样一直循环,直到结果为0,最后的d%n余数就是n进制的最低位。可用一个数组记录下这些值,输出就是N进制了。只要注意是从高位到低位就行了。
追问
说的那么简单,给编个程序被!!
追答
本来就是一个简单的程序嘛,这个还是自己编好点,只要注意N>10以后用一个字母表示下数字就行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询