题记:写这篇博客要主是加深自己对二进制数代码的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。
进制转换
这个问题比拟基本,也比拟简单,直接给出代码
#include<stdio.h> #include<string.h> #include<math.h> /*第一种方法:二进制数转整型*/ int b2i(char *bStr){ int count=0; while(*bStr!=0){ count=*bStr-'0'+count*2; bStr++; } return count; } /*第二种方法:二进制数转整型*/ int b2ix(char *bStr){ int count=0,len=strlen(bStr),i,j; for(i=len-1,j=0;i>=0;i--,j++){ count+=(bStr[i]-'0')*(int)pow(2,j); } return count; } /*字符串逆置*/ void rotateStr(char *res,int len){ int mid=len/2,i; char tmp; for(i=0;i<mid;i++){ tmp=res[i]; res[i]=res[len-1-i]; res[len-1-i]=tmp; } } /*移位法:整型n转2进制*/ void i2b(int n,char res[]){ int i=0; do{ if( (n&1)==0){ res[i++]=0+'0'; }else{ res[i++]=1+'0'; } n=n>>1; }while(n>0); res[i]=0; rotateStr(res,i); } /*辗转相除法:整型n转radix进制*/ void i2r(int n,int radix,char res[]){ int i=0; do{ res[i++]=n%radix+'0'; n/=radix; }while(n>0); res[i]=0; rotateStr(res,i); } /*radix进制数转整型*/ int r2i(int radix,char *str){ int count=0; while(*str!=0){ count=*str-'0'+count*radix; str++; } return count; } void main(){ char bStr[1024]="11010"; int n; printf("str=%s\n",bStr); printf("b2i=%d\n",(n=b2i(bStr))); printf("b2i=%d\n",b2ix(bStr)); char res[1024]; i2r(n,8,res); printf("i2r=%s\n",res); i2b(n,res); printf("i2b=%s\n",res); printf("b2r=%d\n",r2i(4,bStr)); }
文章结束给大家分享下程序员的一些笑话语录: 现在社会太数字化了,所以最好是有一个集很多功能于一身的设备!