Chinaunix首页 | 论坛 | 博客
  • 博客访问: 359239
  • 博文数量: 60
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 1138
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 16:18
个人简介

最多140个字

文章分类

全部博文(60)

文章存档

2016年(1)

2015年(34)

2014年(25)

分类: C/C++

2015-08-18 09:05:41


  1. void addtwobits(char *sum,char a,char b,int *carry)
  2. {
  3.     *sum=(((a-'0')+(b-'0')+*carry)&0x01)+'0';
  4.     *carry=((a-'0')+(b-'0')+*carry)>>1;
  5. }
  6. void revert(char *a,int *len)
  7. {
  8.     int i=0;
  9.     *len=strlen(a);
  10.     for(i=0;i<(*len)/2;i++)
  11.     {
  12.         char tmp=a[i];
  13.         a[i]=a[*len-1-i];
  14.         a[*len-1-i]=tmp;
  15.     }
  16. }
  17. char* addBinary(char* a, char* b) {
  18.     int maxlen=0;
  19.     int minlen=0;
  20.     char* n;
  21.     char* m;
  22.     int ls,rs;
  23.     revert(a,&ls);
  24.     revert(b,&rs);
  25.     if(ls>rs)
  26.     {
  27.         n=a;
  28.         m=b;
  29.         maxlen=ls+2;
  30.         minlen=rs;
  31.     }
  32.     else
  33.     {
  34.         n=b;
  35.         m=a;
  36.         maxlen=rs+2;
  37.         minlen=ls;
  38.     }
  39.     int i=0;
  40.     int carry=0;
  41.     char* sum=malloc(sizeof(char)*maxlen);
  42.     for(;i<maxlen-2;i++)
  43.     {
  44.         if(i<minlen)
  45.             addtwobits(&sum[i],n[i],m[i],&carry);
  46.         else
  47.             addtwobits(&sum[i],n[i],'0',&carry);
  48.     }
  49.     
  50.     if(carry==1)
  51.     {
  52.         
  53.         sum[i]=carry+'0';
  54.         sum[i+1]=0;
  55.     }
  56.     else
  57.         sum[i]=0;
  58.     int len;
  59.     revert(sum,&len);
  60.     return sum;
  61. }

阅读(3037) | 评论(0) | 转发(0) |
0

上一篇:Reverse Bits

下一篇:tinyhttpd源码分析

给主人留下些什么吧!~~