c语言编写二进制转换函数,c++转二进制函数

C语言,写一个函数,实现二进制到十进制的转换。

#include stdio.h

成都创新互联长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为巴里坤哈萨克企业提供专业的成都网站制作、做网站,巴里坤哈萨克网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

double b2d(char *s);

int main(void) 

{

char s[100];

while(gets(s))

{

fflush(stdin);

printf("%.0lf\n",b2d(s));

}

return 0;

}

double b2d(char *s)

{

double n;

for(n=0;*s;++s)

{

n=n*2+*s-'0';

}

return n;

}

用C语言编写二进制转换十进制的程序。

1、为了完成进制的转换,在主函数中声明了个函数Sum,主要用于将二进制的每一位转换为十进制后的数相加,返回值就是相加后的和。另外定义了一个数组array[8],用于存放输入的八位二进制数。

2、然后使用了一个for循环语句,用于输入八位二进制数。在scanf函数里,在%d之间加了一个1,即%1d,这样是好连续的输入八个数,如果没有中间的1,则编译器会认为你只输入了一个数,即那个八位数。然后使用printf函数输出,并且调用Sum函数,数组名作为实参。

3、在Sum函数中,又声明了一个power函数,power函数的作用是求2的n次方,其实这里可以调用库函数pow,但是老师要求不调用库函数,因此就自己写了一个求2的n次方的函数,在这里n为指数,term为每一位数转换为十进制后的的数,如1*(2*2),sum为总和。

4、接着,使用了一个for循环语句,i用于控制循环的次数,n从最高的指数7开始每次循环减一,如果指数大于或等于零的,就进行循环,因为二进制的最后一位转换为十进制数时指数就是零,此后循环就结束。调用power函数时,将n作为实参,最后将和返回,即将sum作为返回值返回给Sum函数。

5、在power函数中,如果b等于零,即指数为零,则返回1,否则就进入一个循环,j用于控制循环次数,有疑问的可以用笔算算乘2的个数对不对,最后将i返回。

6、最后看一下运行的结果。

怎样用C语言将二进制数转换成十进制

将二进制转成十进制,按权值展开求和即可。

可以通过以下代码解决:

#include stdio.h

#include stdlib.h

int main()

{

char a[17];

gets(a);

int len,i,sum=0,m,j;

len=strlen(a);

if(len=16)

{

for(i=0;ilen;i++)

{

m=1;

if(a[i]=='1')

{

for(j=1;j=len-i-1;j++)

m*=2;

sum+=m;

}

}

printf("%d",sum);

}

return 0;

}

扩展资料:

我们常用的进制包括:二进制、八进制、十进制与十六进制,它们之间区别在于数运算时是逢几进一位。比如二进制是逢2进一位,十进制也就是我们常用的0-9是逢10进一位。

十进制转二进制:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。

八进制转二进制:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。

十六进制转二进制:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。

负数的进制转换稍微有些不同。

先把负数写为其补码形式(在此不议),然后再根据二进制转换其它进制的方法进行。

例:要求把-9转换为八进制形式。则有:

-9的补码为1111 1111 1111 0111。从后往前三位一划,不足三位的加0

111----7

110----6

111----7

111----7

111----7

001----1

然后我们将结果按从下往上的顺序书写就是:177767,那么177767就是十进制数-9的八进制形式。

其实转化成任意进制都是一样的。

参考资料:

二进制——百度百科

十进制——百度百科

分享文章:c语言编写二进制转换函数,c++转二进制函数
文章路径:https://www.cdcxhl.com/article20/dseipco.html

成都网站建设公司_创新互联,为您提供搜索引擎优化网站设计微信小程序定制网站网页设计公司定制开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营