问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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
来输出,也就是说改变输出格式只能输出十进制数,八进制数和十六进制数。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
锅炉切圆直径调整 为什么我打开excel后是灰色的? 有没有什么值得推荐的投资港股的QDII基金? - 知乎 win10电脑屏幕亮度调不了怎么办 考焊工证具体怎么操作 广汽传祺是丰田技术吗 广汽传祺与广汽丰田有关系吗 怎样才能让不愿写作业的孩子听话? 上初中不写作业不想学习的孩子应该如何管教? 出生在2020年农历七月十二日的宝宝怎么取名有内涵? 多哈回合谈判各方呼吁 青木瓜怎样丰胸 乐天玛特超市购物卡去金鹰看电影能用吗 《唐雎不辱使命》中错意的错通措,解释到底是什么? 塑封大米保质期写的一年,已经过期半年了,但是塑封没开还能吃吗? “会错意”是什么意思? 泡泡玛特小程序怎么加购物车买三个 红枣。莲子。木瓜要怎么弄才会丰胸? 11214283165找规律? 为什么今天在扬州乐天玛特购物的人超级多 《唐雎不辱使命》中“故不错意也”中的错什么意思 上海乐天玛特最新消息乐天玛特购物卡可以使用吗? 手又大又粗怎么办 m.ys137.com “唐雎不辱使命 故不错意也”的“错”是什么意思? mart和mall什么区别 求!电影我的野蛮女友里的插曲! 《唐雎不辱使命》中&quot;故不错意也&quot;的“错意”是什么意思? mart mall market三者的区别 木瓜怎样能丰胸 site 求《我的野蛮女友2》插曲,就是捏女的向何炅求婚那段的?? 错意什么意思 木瓜怎么做 故不错意也中错的意思是什么? 为什么乐天玛特都关门了? 国产摩托跑车单杠250CC最快能跑多快? 错意 什么意思? 仪征有大润发吗 不看不知道丨48个最容易会错意的成语,你都知道吗 YS要转YX的话,练技能的时候最少要留多少技能点? 乐天玛特的购物卡怎么处理 感觉会错意了、越想越尴尬,以后看见她怎么办啊 盛玛特购物中心怎么样 有哪些你会错意的感情经历? popmart和万代区别 会错意。是什么意思 js 正则获取a标签内容 南阳有哪些超市和购物中心 猫眼电影的9.9看电影具体流程怎么样?从网上买票到电影院有什么流程? 泡泡玛特回应盲盒涨价,你还会买单吗? 在古代诗词或者文章里都有哪些让人会错意的句子? 关于水浒Q传50级剧情的问题