免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2673 | 回复: 5
打印 上一主题 下一主题

初学c,写了一个二进制转换成十进制的程序,请大家指点! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-08 21:02 |只看该作者 |倒序浏览
#include <stdio.h>
#include <string.h>
#include <stdlib.h>  
#include <math.h>

int BIN_DEX(char a[], int);

int main(void)
{
        
    int t=0;   
    char m[17]="0100101100101001";
        
      
     printf("%d", BIN_DEX(m,t));
     getchar();
      
     return 0;
}


int BIN_DEX(char b[],int t)
{  
    for(int i=15;i>=-1;i--)
     {
         
         if (b[i]=='1')
          {
                int a=1;   
                    for(int x=0; x<=15-i-1;x++)
                     {
                       a=a*2;
                     }
                t=t+a;     
          }
      
     }
   return t;
}


不知道用C还有没有更好的办法

[[i] 本帖最后由 crny 于 2006-11-8 21:44 编辑 [/i]]

论坛徽章:
0
2 [报告]
发表于 2006-11-08 21:37 |只看该作者
请把 Discuz! 代码禁用,谢谢

论坛徽章:
0
3 [报告]
发表于 2006-11-08 23:28 |只看该作者

  1. int BINTOINT(char *bit)
  2. {
  3. int t,i,num,size;
  4. for(t=0,i=-1,size=strlen(bit)+1;size--;i++)
  5.   {
  6.    bit[size]=='1'?(num=1<<i):(num=0);
  7.    t+=num;
  8.   }
  9. return t;
  10. }
复制代码

以前写的
新发明的

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<unistd.h>
  4. #include<string.h>
  5. int main(int argc,char *argv[])
  6. {
  7. char buf[BUFSIZ];
  8. if(argc!=2)
  9.   {
  10.   return -1;
  11.   }
  12. snprintf(buf,strlen(argv[1])+20,"echo   $((2#%s))",argv[1]);
  13. system(buf);
  14. return 0;
  15. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2006-11-09 10:02 |只看该作者
进制之间转换有两种方法。
1. 欧几里德辗转相除法。
2. 科学记数法。

lovesaka的第一个例子就是科学记数法。

论坛徽章:
0
5 [报告]
发表于 2006-11-09 10:13 |只看该作者
补充一下,实际上都是基于多项式的。
形如:
anx^n+a(n-1)x^(n-1)+...+a0=bmy^m+b(m-1)y^(m-1)+...+b0

x,y是基,ai < x,bj < y。

[ 本帖最后由 lotcor 于 2006-11-9 10:14 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-11-09 11:05 |只看该作者
尽量使用位运算 :p  以下代码尚有精简余地

  1. unsigned int bin2dec(char *s)
  2. {
  3.   unsigned int d = 0;
  4.   while (*s)
  5.   {
  6.     d = (d<<1)|(*s == '1' ? 1 : 0);
  7.     s++;
  8.   }
  9.   return d;
  10. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP