#include "stdioh"
#define DataLone int
int main()
{
DataLone Two[sizeof(DataLone)];
DataLone Bit;
DataLone temp=1;
int i;
DataLone Ten;
Bit=sizeof(DataLone)8;
printf("请输入一个十进制数:");
scanf("%d",&Ten);
if(Ten==0)
{
for(i=0;i<Bit;i++)
{
printf("0");
}
}
else
{
for(i=0;i<Bit;i++,temp=temp<<1)
{
if((Ten&temp)!=0)
{
Two[Bit-1-i]=1;
}
else Two[Bit-1-i]=0;
}
for(i=0;i<Bit;i++)
{
printf("%d",Two[i]);
}
}
printf("\n");
return 0;
}
我这程序的特点是,在任何编译器都适用,还有,只要把#define DataLone int 中的int换成别的类型,如long,char,就可以伸缩二进制输出的长短希望楼主喜欢
例题:请编制函数ReadDat()实现从文件INDAT中读取100个十六进制整数到数组xx中;请编制函数H16To10()将xx中的十六进制数转换成十进制数并把已转换的十进制数仍存放在字符串数组xx,最后调用函数WriteDat()把结果输出到OUTDAT文件中。
原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000)
部分源程序已给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include
<stdioh>
#include
<stdlibh>
#include
<ctypeh>
#include
<stringh>
#define
MAX
100
char
xx[MAX][20]
void
WriteDat(void)
int
ReadDat(viod)
{
FILE
fp;
if((fp=fopen(\
INDAT\
,\
r)==NULL)
return
1;
fclose(fp);
return
0;
}
void
H16To10(void)
{
}
void
main()
{
int
i;
for(i=0;i<MAX;i++)memset(xx[i],0,20);
if(ReadDat()){
printf(\
数据文件INDAT不能打开!\\007\\n\
);
return;
}
H16To10()
WriteDat()
}
void
WriteDat(void)
{
FILE
fp;
int
i;
fp=fopen(\
OUTDAT\
,\
w\
);
for(i=0;i<MAX;i++)fprintf(fp,\
%s\\n\
,xx[i]);
fclose(fp);
}
--------------------------------------------------------------------------------
/
注:该题与题39相似,只是改变函数itoa()的格式。/
int
ReadDat(void)
{
FILE
fp
;
int
i,data;
char
yy[20];
if((fp=fopen("indat","r"))==NULL)
return
1;
for(i=0;i<100;i++)
{fscanf(fp,"%x,",&data);itoa(data,yy,16);strcpy(xx[i],yy);}
fclose(fp)
;
return
0
;
}
void
H16to10(void)
{
int
i,data;
char
yy[20];
for(i=0;i<100;i++)
{data=strtol(xx[i],NULL,16);itoa(data,yy,10);strcpy(xx[i],yy);}
}
计算机中常用的数的进制主要有:二进制、八进制、十六进制,学习计算机要对其有所了解。2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。以下简介各种进制之间的转换方法:一、二进制转换十进制例:二进制“1101100”1101100←二进制数6543210←排位方法例如二进制换算十进制的算法:126+125+024+123+122+021+020↑↑说明:2代表进制,后面的数是次方(从右往左数,以0开始)=64+32+0+8+4+0+0=108二、二进制换算八进制例:二进制的“10110111011”换八进制时,从右到左,三位一组,不够补0,即成了:010110111011然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:010=2110=4+2=6111=4+2+1=7011=2+1=3结果为:2673三、二进制转换十六进制十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:010110111011运算为:0101=4+1=51011=8+2+1=11(由于10为A,所以11即B)1011=8+2+1=11(由于10为A,所以11即B)结果为:5BB四、二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:01100100,转换为10进制为:计算:020+021+122+023+024+125+126+027=100五、八进制数转换为十进制数八进制就是逢8进1。八进制数采用0~7这八数来表达一个数。八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……所以,设有一个八进制数:1507,转换为十进制为:计算:780+081+582+183=839结果是,八进制数1507转换成十进制数为839六、十六进制转换十进制例:2AF5换算成10进制直接计算就是:5160+F161+A162+2163=10997(别忘了,在上面的计算中,A表示10,而F表示15)、现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。假设有人问你,十进数1234为什么是一千二百三十四?你尽可以给他这么一个算式:1234=1103+2102+3101+4100十进制与二进制转换之相互算法十进制转二进制:用2辗转相除至结果为1将余数和最后的1从下向上倒序写就是结果例如302302/2=151余0151/2=75余175/2=37余137/2=18余118/2=9余09/2=4余14/2=2余02/2=1余0故二进制为100101110二进制转十进制从最后一位开始算,依次列为第0、1、2位第n位的数(0或1)乘以2的n次方得到的结果相加就是答案例如:01101011转十进制:第0位:1乘2的0次方=11乘2的1次方=20乘2的2次方=01乘2的3次方=80乘2的4次方=01乘2的5次方=321乘2的6次方=640乘2的7次方=0然后:1+2+0+8+0+32+64+0=107.二进制01101011=十进制107.一、二进制数转换成十进制数由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数式,然后按十进制加法规则求和。这种做法称为"按权相加"法。二、十进制数转换为二进制数十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。1十进制整数转换为二进制整数十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。2.十进制小数转换为二进制小数十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。1.二进制与十进制的转换(1)二进制转十进制方法:"按权求和"例:(101101)2=(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10=(8+0+2+1+0+025)10=(1125)10(2)十进制转二进制·十进制整数转二进制数:"除以2取余,逆序输出"例:(89)10=(1011001)2289244……1222……0211……025……122……121……00……1·十进制小数转二进制数:"乘以2取整,顺序输出"例:(0.625)10=(0.101)20.625X21.25X20.5X21.02.八进制与二进制的转换例:将八进制的37416转换成二进制数:37.416011111.100001110即:(37416)8=(1111110000111)2例:将二进制的101100011转换成八进制:0101100011002614即:(10110011)2=(2614)83.十六进制与二进制的转换例:将十六进制数5DF9转换成二进制:5DF.9010111011111.1001即:(5DF9)16=(101110111111001)2例:将二进制数1100001111转换成十六进制:01100001.111061.E即:(1100001111)2=(61E)16
1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。
2、具体实现方法可以参考如下程序:
#include <stdioh>void main()
{
int he;
int re=0; // 保存转换为10进制的结果
int k=16; // 16进制
int n=1; // 位权
scanf("%d", &he); // 接收用户输入的16进制数,不含0x前缀
while(he != 0)
{
re += (he%10)n; // 取出各位位码值,并乘以对应的位权值
he /= 10; // 去掉16进制数的最低位,次低位变为最低位
n = k; // 位权乘以16
}
printf("%d",re); // 输出转换后的结果
}
这个程序的算法思想就是ASCII码的转化,ASCII代码中一个字母的小写字母比他相应的大写字母的ASCII码大32,c语言允许字符数据与整数直接进行算术运算
main()
{char
c1,c2;
c1='a';
c2='b';
c1=c1-32;
c2=c2-32;
printf("%c,%c",c1,c2);
}
以上就是关于c语言实现十进制转换二进制全部的内容,包括:c语言实现十进制转换二进制、c语言编写16进制转换十进制函数算法、c语言:写一个程序完成二进制与十进制,十进制与十六进制之间的转换。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)