最常見的進制之間的轉化

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閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容