我是靠谱客的博主 整齐鸵鸟,这篇文章主要介绍进制转换(C++):十六进制、二进制、十进制(附源代码),现在分享给大家,希望可以做个参考。

思路如下:

十进制转二进制:除二求余,得到低位到高位的二进制数字排列 十进制转八进制:除八求余,得到低位到高位的八进制数字排列。

 十进制转十六进制:除十六取余,得到低位到高位的十六进制数字排列,对于 10 ~ 15 转换为 A - F 需要做映射表。

 二进制转十进制:每个二进制位数字乘以该位置的权值,最后求和(权值就是基数的二进制索引次方,索引从 0 开始,比如 2^0)。

 八进制转十进进制:每个八进制位数字乘以该位的权值,最后求和 十六进制转十进制:每个十六进制为数字乘以该位的权值,最后求和。对于 A ~ F 的字母需要查表取数值。

 二进制转八进制:取三合一,即取三个二进制位求十进制数值;从右至左取三合一得到八进制的低位到高位数字排列(左侧取三不够时补 0 凑足) 。

八进制转二进制:取一分三,即取一个八进制位求二进制数字;从左至右取一分三得到二进制的高位到低位数字排列 。

二进制转十六进制:取四合一,即取四个二进制位求十进制数值;从右至左取四合一得到十六进制的低位到高位数字排列(左侧取四不够时补 0 凑足) 。

十六进制转二进制:取一分四,即取一个十六进制为求二进制数字;从左至右取一分四得到二进制的高位到低位的数字排列 八进制和十六进制互相转换借助二进制做中转。

一、十六进制转十进制:

该系列采用C++代码,如有不懂的,可以私信。

解题思想使用了秦九韶算法,可自行百度哦。

源代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream> using namespace std; #define N 16 int main (){ string s; getline(cin,s);//读入的字符串是char类型 int decimal=0,bw=1;//decimal:十进制,bw表示幂的次数-1。 for(int i=s.size()-1;i>=0;i--){ if(s[i]>=65&&s[i]<=70) s[i]=s[i]-'A'+10;//遍历数组,对于大于等于A且小于等于F,进行处理 else s[i]=s[i]-'0'; } for(int i=s.size()-1;i>=0;i--){ decimal+=s[i]*bw; bw*=N; } cout<<decimal<<endl; return 0; }

二、十进制转二进制:

源代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream> #include<cstdio> using namespace std; #define N 2 int main (){ int decimal,binary[50]; //多次读入,ctrl+z可以结束进程 while(scanf("%d",&decimal)!=EOF){ int m=decimal,i=0,r; //求余赋值,注意i是从0开始计数 while(m/N>0){ r=m%N; m/=N; binary[i++]=r; } binary[i++]=m; //逆序输出 for(int j=i-1;j>=0;j--) cout<<binary[i]; } return 0; }

三、二进制转十进制:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream> #include<string> using namespace std; #define N 2 int main (){ string s; cin>>s; int bw=1,decimal=0; for(int i=s.size()-1;i>=0;i--){ s[i]=s[i]-'0'; decimal+=s[i]*bw; bw*=N; } cout<<decimal; return 0; }

延伸:

使用秦九韶算法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream> using namespace std; #define N 2 int main (){ string s; getline(cin,s); int res=0; for(int i=0;s[i]!='';i++) res=res*N+s[i]-'0'; cout<<res<<endl; return 0; }

四、二进制转十六进制:

由于二进制直接转换十六进制,补零方法比较特殊,本人使用二进制转十进制,再转十六进制:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream> using namespace std; #define N 2 int main (){ string s; getline(cin,s); int res=0; for(int i=0;s[i]!='';i++) res=res*N+s[i]-'0'; //转换十进制,得到res; int m=16,k=0; int b[50]; while(res/m>0){ b[k++]=res%m; res/=m; } b[k++]=res; for(int j=k-1;j>=0;j--){ if(b[j]>=10&&b[j]<=15) b[j]=b[j]-10+'A'; if(b[j]>9) printf("%c",b[j]); else printf("%d",b[j]); } return 0; }

本文为学习总结,还望多多指教;

最后

以上就是整齐鸵鸟最近收集整理的关于进制转换(C++):十六进制、二进制、十进制(附源代码)的全部内容,更多相关进制转换(C++)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部