进制转换
进制转换
啊啊啊!不得不说,初三是真的忙啊(忙哭了)
好了,我们来说说进制转换的事
—————————————————————————————————————————————
进制转换
首先是
大进制转小进制
十进制转换为二进制
以二进制转换为十进制为例子,其转换规律为——不断除2,保留余数,直到商为0停止。再将余数倒着组合。
例如
15
1111
| 次数 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 商 | 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
| 位数 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|
| 该位数上的数 | 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;
}
————————————————————————————————————————
好了,其他的就真不码了 (码不动了,你们自己领悟吧)
拜拜啦~~(≧▽≦)/~~


浙公网安备 33010602011771号