最常见的进制之间的转化

1.首先是二进制,八进制,十六进制转十进制.

每一个进制(二进制,八进制,十六进制)的从右往左数,
第一位的权值就是对应进制的0次方,第二位的权值就是对应进制的二次方
,以此类推,然后对应位的数乘以对应位的权值再相加起来就是该进制对应的十进制的数是多少.
例:十六进制2AF5换算成十进制:
用竖式计算:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2= 2560
第3位: 2 * 16^3 = 8192
相加等于10997.
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
其他进制转十进制方法一样.
有小数的次方就跟着减.
例十六进制的0.1转10进制,就是1*16^-1,然后以此类推.(其他进制也是如此)

2:八进制,十进制,十六进制转二进制.

(先讲这个,因为后面很多需要利用二进制作为中间转换)
  #I: 八进制换二进制
 八进制转二进制:
  整数部分:从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充 .
 (想也知道,因为二进制的111刚好是7,所以就可以根据这个来进行转化)
  例如:11001补充后是011001.
  八进制数换成二进制:0=000;1 = 001;2 = 010;3 =011;4 = 100;5 = 101;6 =110;7 = 111
  011=3,001=1,所以31(八进制)=011001(二进制)

   #III:十进制换二进制
   1. 十进制整数转换为二进制整数
 
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。
具体做法是:用2整除十进制整数,可以得到一个商和余数;
再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,
然后把先得到的余数作为二进制数的低位有效位,
后得到的余数作为二进制数的高位有效位,依次排列起来。

十进制整数转二进制
如:(255)10=(11111111)2
255/2=127=====余1
127/2=63======余1
63/2=31=======余1
31/2=15=======余1
15/2=7========余1
7/2=3=========余1
3/2=1=========余1
1/2=0=========余1
就是这样来的.
   #II:十六进制换二进制
   首先把十六进制数04271544中的每一位数转换为二进制数,每个数要分四位,不足四位的前面加零,请看下面演示:
0  0000
4  0100
2  0010
7  0111
1  0001
5  0101
4  0100
4  0100
将得出四位二进制数串连起来就是结果了
所以,十六进制04271544转换二进制为
100001001110001010101000100 (前面的0就省了)

3: 二进制,八进制,十进制转十六进制.

   #I:二进制转十六进制   
    
16进制就有16个数,0~15,用二进制表示15的方法就是1111,
从而可以推断出,16进制用2进制可以表现成0000~1111,顾名思义,也就是每四个为一位。举例:
00111101可以这样分:
0011|1101(最高位不够可用零代替),对照着二进制的表格,1024 512 256 128 64 32 16 8 4 2 1 
(一般例举这么多就够了,如果有小数的话就继续往右边列举,如0.5 0.25 0.125 0.0625……)
1024 512 256 128 64 32 16 8 4 2 1
0 0 1 1| 1 1 0 1
左半边=2+1=3 右半边=8+4+1=13=D
结果,0111101就可以换算成16进制的3D.
    #II:八进制换十六进制
    这个转化没有现成的转化方式,只能先将八进制换成二进制,然后再转换成十六进制.所以方法就是这样.(转化方式上面有)
八进制转换为16进制数,使用二进制作为中间结果会比使用十进制还简单,例如:

八进制的:1234567

转换为二进制是每个数字转换为三位二进制:001 010 011 100 101 110 111

然后把这些数字从右边开始进行按四位分组:0 0101 0011 1001 0111 0111

然后从右边每四位组依次对应一个16进制数:053977 

即 (1234567)8=(053977)16
      #II:十进制转十六进制
例:十进制的1610(有了二进制换十六进制的基础,就有两种方法)
直接转16进制:
1610/16=100……10(A);//想想他们之间的关系,就知道为什么要除了.
100 /16=  6……4;
6   /16=  0……6;

故:1610(10)=64A(16).

先转2进制:
1610/2=805……0;
805 /2=402……1;
402 /2=201……0;
201 /2=100……1;
100 /2=50 ……0;
50  /2=25 ……0;
25  /2=12 ……1;
12  /2=6  ……0;
6   /2=3  ……0;
3   /2=1  ……1;
1   /2=0  ……1.
1610(10)= 0110 0100 1010(2)
1610(10)= 64A(16)

4:二进制,十进制,十六进制转八进制.

有了上面的基础,这里就只说说十六进制换八进制
是 先转化成2进制,再转换成8进制: 
0 0000 
1 0001 
2 0010 
3 0011 
4 0100 
5 0101 
6 0110 
7 0111 
8 1000 
9 1001 
A 1010 
B 1011 
C 1100 
D 1101 
E 1110 
F 1111 

先每四位一组转换成2进制 
例如: 
3BC24 
分别对应到上表 就是: 
3 0011 
B 1011 
C 1100 
4 0100 

连起来就是: 
0011 1011 1100 0100 

再按照每三个一组分组: 
0 011 101 111 000 100 

对应到8进制: 
(其实跟上表的前一半是一样的): 
0 000 
1 001 
2 010 
3 011 
4 100 
5 101 
6 110 
7 111 

0 011 101 111 000 100 
0__3__5__7__0__4 
所以8进制就是35704

即(3BC24 )16=(035704)8.

其实你会发现10进制转任何进制就是用那个十进制的数除以那个进制,然后再倒着书写即可.

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
char a[150];
int b[150];
int cnt=0;
void shizhuanji(int x,int jz)
{
    if(x/jz)
        shizhuanji(x/jz,jz);
    cout << x%jz;
}

int main()
{
    int n,jz;
    cin >> n >> jz;
    printf("十进制的%d转成%d进制为",n,jz);
    shizhuanji(n,jz);
    printf("\n");
}

而其他进制换十进制就是对应位权值的关系即可

代码如下:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
char a[150];
int b[150];
int cnt=0;
void jizhuanshi(int jz,int *x)
{
    int s=0;
    int ans=0;
    for(int i=0;i<cnt;i++)
    {
        double m=pow(jz,ans);//pow的原型是浮点数,所以必须要用一个db型做中间桥梁!
        //printf("%.2f %d\n",m,x[i]);//帮助理解过程.
        s+=x[i]*m;
        ans++;
        //printf("%d\n",s);
    }
    printf("%d进制的%s转换成十进制为%d\n",jz,a,s);
}
int main()
{
    int jz;
    cin >> jz;
    scanf("%s",a);
    int len=strlen(a);
    for(int i=len-1;i>=0;i--)   b[cnt++]=a[i]-'0';
    jizhuanshi(jz,b);
}

而2,8,16,进制因为数的特殊性常常就用几位代表一个数来进行他们之间的相互转换.(这个代码看完后就自己写了哈)(其实也不难,很好写的)
所以希望看完这个你能懂起进制之间的关系.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容