进制转换

进制转换

啊啊啊!不得不说,初三是真的忙啊(忙哭了
好了,我们来说说进制转换的事
—————————————————————————————————————————————

进制转换

首先是

大进制转小进制

十进制转换为二进制

以二进制转换为十进制为例子,其转换规律为——不断除2,保留余数,直到商为0停止。再将余数倒着组合。

例如
15
1111

次数12345
7 3 2 1 0
余数 1 1 1 1  

倒着组合
1111
——————————————————————
我们来看看代码实现

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
	int ten;//该二进制数
	char ans[105]={0};//余数
	int len=0;//字符串下标
	cin>>ten;//输入该二进制数
	while(ten!=0){
		int u=ten%2;
		//因为这里存储余数使用字符串,而‘u’即为int类型的余数
		ten/=2;
	//在这道题中,‘ten’可以直接改变
	//有一些题则需要与原数比较,此时需要一个新变量,使其改变
	//别忘了具体情况,具体分析
		ans[len]= u+'0';//现在将余数存入字符串中
		len++;//记得改变字符串下标
	}
	
	for(int i=len-1;i>=0;i--){
		cout<<ans[i];
		//最后将余数从后往前输出
	}
	return 0;
}

说明:
****余数使用字符存储,是为了更好地能从10进制转2进制拓展、迁移到转其他进制,例如:当我们需要转成类似十六进制的数字值的时候,会出现余数为10对应(A),余数为11(对应B)等情况。这个时候使用字符类型。
****如果仅考虑二进制,二进制余数不是0就是1,可以使用整数。
其代码如下

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
	int ten;
	int ans[105] = {0};
	int len = 0;
	cin >> ten;
	while (ten != 0) {
		ans[len] = ten % 2;
		ten /= 2;
		len++;
	}
	for (int i = len - 1; i >= 0; i--) {
		cout << ans[i];
	}
	return 0;
}

其中,两段代码中都需注意——要先取余数,再除进制数
—————————————————————————————————————————————

小进制转大进制

二进制转换为十进制

现在我们以十进制转换为十=二进制为例子,其转换规律为——对二进制值从右向左进行遍历,取出每一位与2的次方值相乘,次方数从零开始变化。将相乘的结果累加。累加的总和是十进制的值。

例如
1010 (按权相加)
10

位数3210
该位数上的数 1 0 1 0
按权相加(该位数上的数和对应的2的该位数次方之积) 1*2^3 = 8 0*2^2 = 0 1*2^1 = 2 0*2^0 =0

8+0+2+0=10
——————————————————————
我们来看看代码实现

#include <iostream>
#include <cstring>
using namespace std;

int main() {
	char num[105]={0};
	cin>>num;
	int len=strlen(num);
	int ten=0;
	int cf=1;//cf为2的次方数,此时 cf=2^0=1
	for(int i=len-1;i>=0;i--){//从右向左遍历
//            每一位的值  和 2的次方值相乘
		ten=ten+(num[i]-'0')*cf;
      //将乘积累加
		cf=cf*2;
	}
	cout<<ten;
	
	return 0;
}

这一段要好好理解
—————————————————————————————————————————————
对于其他进制之间的转换,也大都是换汤不换药
这里,我就不码了
只有一点说一下
其进制数大于十时,,,算了,还是码一下
—————————————————————————————————————————

十进制转其他进制 M

八进制 : 0 1 2 3 4 5 6 7 逢八进一
十六进制:0 1 2 3 4 5 6 7 8 9 (10)A (11)B (12)C … (15)F 逢十六进一
看看代码实现

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
	char ans[105]={0};
	int len=0;
	int ten,m;//m为进制数
	cin>>ten>>m;
	while(ten!=0){
		int u=ten%m;
		ten/=m;
		if(u>=10){
			ans[len]=u-10+'A';
		}else{
			ans[len]=u+'0';
		}
		len++;
	}
	for(int i=len-1;i>=0;i--){
		cout<<ans[i];
	}
	return 0;
}

————————————————————————————————————————

好了,其他的就真不码了 (码不动了,你们自己领悟吧
拜拜啦~~(≧▽≦)/~~

posted @ 2021-01-24 00:13  不爱学习的闲余  阅读(102)  评论(1)    收藏  举报