C语言 怎样将二进制数转换成十进制,又怎样将十进制数转换成二进制数输出?
发布网友
发布时间:2022-04-25 08:59
我来回答
共2个回答
热心网友
时间:2023-11-11 06:20
将二进制数转换成十进制,一般是从字符串转换成一个整数,按位值乘以权值相累加得到结果。
如:1010=1*2^3+0*2^2+1*2+0
=((((1*2)+0)*2)+1)*2+0
将十进制数转换成二进制数,采用的原理就是辗转除2,逆向输出余数。(windows系统下的itoa函数也是一个不错的选择,但DIY更有意义)
实现方法:
#include <stdio.h>
void swap( char *a, char *b )
{
char t=*a;
*a=*b;
*b=t;
}
char *reverse(char *s,int len)
{
char *b=s, *e=s+len-1;
while( b<e )
{
swap(b++,e--);
}
return s;
}
char *dec2bin(n)
{
static char str[33];
int i=0;
do {
str[i++]=n%2+'0';
n/=2;
}while( n );
str[i]=0;
return reverse(str,i);
}
int bin2dec(char *s)
{
int i,n=0;
for( i=0;s[i];i++ )
n=n*2+s[i]-'0';
return n;
}
void main()
{
int n=100;
char *p;
p=dec2bin(n);
printf("%d(D)=%s(B)\n", n, p );
n=bin2dec(p);
printf("%s(B)=%d(D)\n", p, n );
}运行结果:
100(D)=1100100(B)
1100100(B)=100(D)
热心网友
时间:2023-11-11 06:21
数学理论:
十进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写
就是结果
例如302
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
故二进制为100101110
下面是十进制转二进制的代码
#include
int
main(void)
{
int
i,m,n;
int
cs[20];
int
ys[20];
while(scanf("%d",&n)!=EOF)
{
cs[0]=n;
if(cs[0]==0)
printf("\n");
else
{
i=0;
while(cs[i]!=0)
{
i++;
cs[i]=cs[i-1]/2;
ys[i]=cs[i-1]%2;
}
m=i;
for(i=m;i>0;i--)
printf("%d",ys[i]);
printf("\n");
}
}
return
0;
}
希望能帮助到你。并且楼上说的改变输出格式是错的,C语言只能通过%d
%f
%c
%o
%u
%x
来输出,也就是说改变输出格式只能输出十进制数,八进制数和十六进制数。
热心网友
时间:2023-11-11 06:20
将二进制数转换成十进制,一般是从字符串转换成一个整数,按位值乘以权值相累加得到结果。
如:1010=1*2^3+0*2^2+1*2+0
=((((1*2)+0)*2)+1)*2+0
将十进制数转换成二进制数,采用的原理就是辗转除2,逆向输出余数。(windows系统下的itoa函数也是一个不错的选择,但DIY更有意义)
实现方法:
#include <stdio.h>
void swap( char *a, char *b )
{
char t=*a;
*a=*b;
*b=t;
}
char *reverse(char *s,int len)
{
char *b=s, *e=s+len-1;
while( b<e )
{
swap(b++,e--);
}
return s;
}
char *dec2bin(n)
{
static char str[33];
int i=0;
do {
str[i++]=n%2+'0';
n/=2;
}while( n );
str[i]=0;
return reverse(str,i);
}
int bin2dec(char *s)
{
int i,n=0;
for( i=0;s[i];i++ )
n=n*2+s[i]-'0';
return n;
}
void main()
{
int n=100;
char *p;
p=dec2bin(n);
printf("%d(D)=%s(B)\n", n, p );
n=bin2dec(p);
printf("%s(B)=%d(D)\n", p, n );
}运行结果:
100(D)=1100100(B)
1100100(B)=100(D)
热心网友
时间:2023-11-11 06:21
数学理论:
十进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写
就是结果
例如302
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
故二进制为100101110
下面是十进制转二进制的代码
#include
int
main(void)
{
int
i,m,n;
int
cs[20];
int
ys[20];
while(scanf("%d",&n)!=EOF)
{
cs[0]=n;
if(cs[0]==0)
printf("\n");
else
{
i=0;
while(cs[i]!=0)
{
i++;
cs[i]=cs[i-1]/2;
ys[i]=cs[i-1]%2;
}
m=i;
for(i=m;i>0;i--)
printf("%d",ys[i]);
printf("\n");
}
}
return
0;
}
希望能帮助到你。并且楼上说的改变输出格式是错的,C语言只能通过%d
%f
%c
%o
%u
%x
来输出,也就是说改变输出格式只能输出十进制数,八进制数和十六进制数。
热心网友
时间:2023-11-11 06:20
将二进制数转换成十进制,一般是从字符串转换成一个整数,按位值乘以权值相累加得到结果。
如:1010=1*2^3+0*2^2+1*2+0
=((((1*2)+0)*2)+1)*2+0
将十进制数转换成二进制数,采用的原理就是辗转除2,逆向输出余数。(windows系统下的itoa函数也是一个不错的选择,但DIY更有意义)
实现方法:
#include <stdio.h>
void swap( char *a, char *b )
{
char t=*a;
*a=*b;
*b=t;
}
char *reverse(char *s,int len)
{
char *b=s, *e=s+len-1;
while( b<e )
{
swap(b++,e--);
}
return s;
}
char *dec2bin(n)
{
static char str[33];
int i=0;
do {
str[i++]=n%2+'0';
n/=2;
}while( n );
str[i]=0;
return reverse(str,i);
}
int bin2dec(char *s)
{
int i,n=0;
for( i=0;s[i];i++ )
n=n*2+s[i]-'0';
return n;
}
void main()
{
int n=100;
char *p;
p=dec2bin(n);
printf("%d(D)=%s(B)\n", n, p );
n=bin2dec(p);
printf("%s(B)=%d(D)\n", p, n );
}运行结果:
100(D)=1100100(B)
1100100(B)=100(D)
热心网友
时间:2023-11-11 06:21
数学理论:
十进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写
就是结果
例如302
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
故二进制为100101110
下面是十进制转二进制的代码
#include
int
main(void)
{
int
i,m,n;
int
cs[20];
int
ys[20];
while(scanf("%d",&n)!=EOF)
{
cs[0]=n;
if(cs[0]==0)
printf("\n");
else
{
i=0;
while(cs[i]!=0)
{
i++;
cs[i]=cs[i-1]/2;
ys[i]=cs[i-1]%2;
}
m=i;
for(i=m;i>0;i--)
printf("%d",ys[i]);
printf("\n");
}
}
return
0;
}
希望能帮助到你。并且楼上说的改变输出格式是错的,C语言只能通过%d
%f
%c
%o
%u
%x
来输出,也就是说改变输出格式只能输出十进制数,八进制数和十六进制数。
热心网友
时间:2023-11-11 06:20
将二进制数转换成十进制,一般是从字符串转换成一个整数,按位值乘以权值相累加得到结果。
如:1010=1*2^3+0*2^2+1*2+0
=((((1*2)+0)*2)+1)*2+0
将十进制数转换成二进制数,采用的原理就是辗转除2,逆向输出余数。(windows系统下的itoa函数也是一个不错的选择,但DIY更有意义)
实现方法:
#include <stdio.h>
void swap( char *a, char *b )
{
char t=*a;
*a=*b;
*b=t;
}
char *reverse(char *s,int len)
{
char *b=s, *e=s+len-1;
while( b<e )
{
swap(b++,e--);
}
return s;
}
char *dec2bin(n)
{
static char str[33];
int i=0;
do {
str[i++]=n%2+'0';
n/=2;
}while( n );
str[i]=0;
return reverse(str,i);
}
int bin2dec(char *s)
{
int i,n=0;
for( i=0;s[i];i++ )
n=n*2+s[i]-'0';
return n;
}
void main()
{
int n=100;
char *p;
p=dec2bin(n);
printf("%d(D)=%s(B)\n", n, p );
n=bin2dec(p);
printf("%s(B)=%d(D)\n", p, n );
}运行结果:
100(D)=1100100(B)
1100100(B)=100(D)
热心网友
时间:2023-11-11 06:21
数学理论:
十进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写
就是结果
例如302
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
故二进制为100101110
下面是十进制转二进制的代码
#include
int
main(void)
{
int
i,m,n;
int
cs[20];
int
ys[20];
while(scanf("%d",&n)!=EOF)
{
cs[0]=n;
if(cs[0]==0)
printf("\n");
else
{
i=0;
while(cs[i]!=0)
{
i++;
cs[i]=cs[i-1]/2;
ys[i]=cs[i-1]%2;
}
m=i;
for(i=m;i>0;i--)
printf("%d",ys[i]);
printf("\n");
}
}
return
0;
}
希望能帮助到你。并且楼上说的改变输出格式是错的,C语言只能通过%d
%f
%c
%o
%u
%x
来输出,也就是说改变输出格式只能输出十进制数,八进制数和十六进制数。
热心网友
时间:2023-11-11 06:20
将二进制数转换成十进制,一般是从字符串转换成一个整数,按位值乘以权值相累加得到结果。
如:1010=1*2^3+0*2^2+1*2+0
=((((1*2)+0)*2)+1)*2+0
将十进制数转换成二进制数,采用的原理就是辗转除2,逆向输出余数。(windows系统下的itoa函数也是一个不错的选择,但DIY更有意义)
实现方法:
#include <stdio.h>
void swap( char *a, char *b )
{
char t=*a;
*a=*b;
*b=t;
}
char *reverse(char *s,int len)
{
char *b=s, *e=s+len-1;
while( b<e )
{
swap(b++,e--);
}
return s;
}
char *dec2bin(n)
{
static char str[33];
int i=0;
do {
str[i++]=n%2+'0';
n/=2;
}while( n );
str[i]=0;
return reverse(str,i);
}
int bin2dec(char *s)
{
int i,n=0;
for( i=0;s[i];i++ )
n=n*2+s[i]-'0';
return n;
}
void main()
{
int n=100;
char *p;
p=dec2bin(n);
printf("%d(D)=%s(B)\n", n, p );
n=bin2dec(p);
printf("%s(B)=%d(D)\n", p, n );
}运行结果:
100(D)=1100100(B)
1100100(B)=100(D)
热心网友
时间:2023-11-11 06:21
数学理论:
十进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写
就是结果
例如302
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
故二进制为100101110
下面是十进制转二进制的代码
#include
int
main(void)
{
int
i,m,n;
int
cs[20];
int
ys[20];
while(scanf("%d",&n)!=EOF)
{
cs[0]=n;
if(cs[0]==0)
printf("\n");
else
{
i=0;
while(cs[i]!=0)
{
i++;
cs[i]=cs[i-1]/2;
ys[i]=cs[i-1]%2;
}
m=i;
for(i=m;i>0;i--)
printf("%d",ys[i]);
printf("\n");
}
}
return
0;
}
希望能帮助到你。并且楼上说的改变输出格式是错的,C语言只能通过%d
%f
%c
%o
%u
%x
来输出,也就是说改变输出格式只能输出十进制数,八进制数和十六进制数。