欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

带代码的各种转换(二进制、八进制、十进制、十六进制) - (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;
}

花费不少时间总结在一起了,望有用。