带代码的各种转换(二进制、八进制、十进制、十六进制) - (iv) (八进制) ↔ (十六进制)
最编程
2024-05-11 15:57:42
...
(Figure14:八进制与十六进制之间的转换)
- 八进制 → 十六进制
方法:将八进制转换为二进制,然后再将二进制转换为十六进制,小数点位置不变。
例:将八进制的(327)O转换为十六进制的步骤如下:
1. 3 = 011;
2. 2 = 010;
3. 7 = 111;
4. 0111 = 7;
5. 1101 = D;
6. 读数,读数从高位到低位,D7,即(327)O=(D7)H。
(Figure15:图解八进制 → 十六进制)
- 十六进制 → 八进制
方法:将十六进制转换为二进制,然后再将二进制转换为八进制,小数点位置不变。
例:将十六进制的(D7)H转换为八进制的步骤如下:
1. 7 = 0111;
2. D = 1101;
3. 0111 = 7;
4. 010 = 2;
5. 011 = 3;
6. 读数,读数从高位到低位,327,即(D7)H=(327)O。
扩展
负数的进制转换稍微有些不同。
先把负数写为其补码形式(在此不议),然后再根据二进制转换其它进制的方法进行。
包含小数的进制换算:
(ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2
=2560+176+12+0.5+0.046875
=(2748.546875)D
代码
下面代码来源百科(懒~)
十进制转换k进制
#include<cstdio>
#include<iostream>
#include<ctime>
char a[1000];
using namespace std;
int main()
{
int y=0,k,n,x;
char z='A';
scanf ("%d %d",&n,&x);
while (n!=0)
{
y++;
a[y]=n%x;
n=n/x;
if (a[y]>9) a[y]=z+(a[y]-10);
else a[y]=a[y]+'0';
}
for (int i=y;i>0;i--)
printf ("%c",a[i]);
return 0;
}
m进制转换十进制
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
char a[10000];
using namespace std;
int main()
{
int n,m;
int f=0;
scanf ("%s%d",a,&m);
for (int i=0;i<strlen(a);i++)
{
f*=m;
if (a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
{
f=f+(a[i]-'A'+10);
}
else
{
f=f+(a[i]-'0');
}
}
printf ("%d",f);
return 0;
}
注:用C语言的格式化输入输出可以快速转换10进制,8进制和16进制。例子:10进制转16进制:
#include <cstido>
int main()
{
int a;
scanf("%d",&a);
printf("%x",a);
return 0;
}
花费不少时间总结在一起了,望有用。