二进制数代码进制转换

题记:写这篇博客要主是加深自己对二进制数代码的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

    进制转换

    这个问题比拟基本,也比拟简单,直接给出代码

    每日一道理
心的本色该是如此。成,如朗月照花,深潭微澜,不论顺逆,不论成败的超然,是扬鞭策马,登高临远的驿站;败,仍滴水穿石,汇流入海,有穷且益坚,不坠青云的傲岸,有“将相本无主,男儿当自强”的倔强。荣,江山依旧,风采犹然,恰沧海巫山,熟视岁月如流,浮华万千,不屑过眼烟云;辱,胯下韩信,雪底苍松,宛若羽化之仙,知退一步,海阔天空,不肯因噎废食。
#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));

}

文章结束给大家分享下程序员的一些笑话语录: 现在社会太数字化了,所以最好是有一个集很多功能于一身的设备!

原文地址:https://www.cnblogs.com/jiangu66/p/3087292.html