1.1、二進制轉十進制
轉換規程: 從最低位開始,將每個位上的數提取出來,乘以2的(位數-1)次方,然后求和,例如:
二進制 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11
1.2、八制轉十進制
轉換規則: 從最低位開始,將每個位上的數提取出來,乘以8的(位數-1)次方,然后求和,例如:
八進制 0123 = 3*8^0 + 2*8^1 + 1*8^2 = 3+16+64 = 83
1.3、十六進制轉十進制
轉換規則: 從最低位開始,將每個位上的數提取出來,乘以16的(位數-1)次方,然后求和,例如:
十六進制 0x34A = 10*16^0 + 4*16^1 + 3*16^2 = 10+64+768 = 842
2.1、十進制轉二進制binary
規則: 將該數不斷除以2,直到商為0為止,然后將每步得到的余數倒過來,就是對應的二進制,故此法叫做除商逆序取余法;
案例: 將56轉換為二進制
56 :
56 / 2 = 28 余0
28 / 2 = 14 余0
14 / 2 = 7 余0
7 / 2 = 3 余1
3 / 2 = 1 余1
1 / 2 = 0余 1
故56轉換為二進制的結果是:111000
代碼實現:
#include<stdio.h>//轉十進制二進制voidmain(){printf("請輸入一個十進制數:");intbinary=0;//二進制數intb=1;//循環標志intnum[100];//用來存二進制的數組intindex=0;//數組的下標intcount=-1;//用來計算數組的使用個數,這里使用-1是因為數組的下標是從0開始的//所以當我們循環一次去自增的時候,第一次應該是從0開始,如果count的初始值是0的話//就會導致使用的第一個數組的下標為1,那樣會導致存數據的下標index和記錄使用的下標count不一致//使數據溢出scanf("%d",&binary);while(b){num[index]=binary%2;//每次運算取余binary/=2;//每次運算二進制數需要除以2//printf("num[%d]=%d\n",index,num[index]);index++;//每循環一次數組下標就移一位count++;//每循環一次就表示占用了數組的一個位置if(binary==0){b=0;}}printf("占用數組位置%d個",count+1);printf("\n");printf("二進制數為:");for(inti=count;i>=0;i--){printf("%d",num[i]);}getchar();getchar();//回車會被接收,所以需要兩個來暫??刂婆_}
2.2、十進制轉八進制octonary
規則: 將該數不斷除以8,直到商為0,然后將每步得到的余數倒過來,就是對應的八進制。
**案例:**將156轉換為八進制
156:
156 / 8 = 19 余 4
19 / 8 = 2 余 3
2 / 8 = 0 余 2
故156轉換為八進制的結果是:0234
代碼實現:
#include<stdio.h>//十進制轉八進制#defineTRUE1//宏定義true為1#defineFALSE0//宏定義false為0voidmain(){intnum[100];//定義數組用來存儲轉換后的八進制數intoctonary=0;//十進制數intb=TRUE;//循環賦值的標志intindex=0;//存儲八進制位數的下標intcount=-1;//八進制數的位數printf("請輸入一個十進制數:");scanf("%d",&octonary);while(b){num[index++]=octonary%8;//獲取余數octonary/=8;//累除count++;if(octonary==0){//當octonary為0時,表示已經除完了,除到底了,這時候只需要將所得到的的余數b=FALSE;//倒過來就是需要求的八進制數了}}printf("占用數組位置%d個\n",count+1);printf("八進制數為:");for(inti=count;i>=0;i--){printf("%d",num[i]);}getchar();getchar();}
2.3、十進制轉十六進制HEX(hexadecimal)
規則: 將該數不斷除以16,直到商為0,然后將每步得到的余數倒過來,就是對應的十六進制。
案例: 將356轉換成十六進制
356:
356 / 16 = 22 余 4
22 / 16 = 1 余 6
1 / 16 = 0 余 1
故356轉換為十六進制的結果為0x164
代碼實現:
#include<stdio.h>#include<stdbool.h>//十進制轉換為十六進制voidmain(){inthexadecimal=0;printf("請輸入一個十進制數:");scanf("%d",&hexadecimal);boolb=true;intindex=0;//數組的下標intnum[100];//用來存儲轉換后十六進制while(b){num[index++]=hexadecimal%16;hexadecimal/=16;if(hexadecimal==0){b=false;}}printf("占用數組的位置%d個\n",index);printf("轉換后的十六進制數為:");for(inti=index-1;i>=0;i--){printf("%d",num[i]);}getchar();getchar();}
3.1、二進制轉八進制
規則: 從低位開始,將二進制數每三位一組(111表示7)分組,不夠的用0補充,將每一組轉換成對應的八進制即可
案例: 將11010101轉成八進制
11010101:對其進行三位一體分組
第一組:101 ——> 5
第二組:010 ——> 2
第三組:011 ——> 3
故,二進制11010101對應的八進制數是:0325
3.2、二進制轉十六進制
規則: 從低位開始,將二進制數每四位一組(1111表示F)進行分組,轉成對應的十六進制數即可
案例: 將11010101轉成十六進制
11010101:對其進行四位一體分組
第一組:0101 ——> 5
第二組:1101 ——> 13
故,二進制11010101轉換為十六進制數是:0xD5
4.1、八進制轉二進制
規則: 將八進制數的每一位,轉換成對應的一個三位的二進制數即可
案例: 將0237轉成二進制
0237:每一位對應三位二進制數進行拆分
第一組 7 ——> 111
第二組 3 ——> 011
第三組 2 ——> 010
故,八進制數0237轉換為二進制為:10011111
4.2、十六進制轉二進制
規則: 將十六進制數的每一位,轉換成對應的一個四位的二進制數即可
案例: 將0X23B轉換成二進制數
0x23B:每一位對應四位二進制數進行拆分
第一組 B ——> 1011
第二組 3 ——> 0011
第三組 2 ——> 0010
故,0x23B轉換為二進制數為:1000111011
看完上述內容,你們掌握使用C語言怎么實現一個進制轉換算法的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注本站行業資訊頻道,感謝各位的閱讀!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖)隨著社會越來越發達,大家都選擇在網絡上汲取相關知識內容,比如摩洛哥在哪,為了更好的解答大家的問題,小編也是翻閱整理了相應內容,下面就一起來看一下吧!1、摩洛哥王國是非洲西北部的一個君主制國家。其東部與阿爾及利亞接壤,南部其實際控制的西撒哈拉地區與毛里塔尼亞緊鄰,西部濱臨大西洋,并向北隔直布羅陀海峽和地中海與葡萄牙、西班牙相望。1979年摩洛哥占領西撒哈拉,但其在西撒哈拉的權利要求一直未被...
存貸比是什么意思?銀行存貸比是指銀行貸款總額/存款總額,存貸比越高,說明銀行資金得到了充足的運用,可以為銀行帶來更多的效益,但同時也會帶來較高的風險。銀行在經營過程中,不僅要達成一定的效益,也要應對客戶的取款需求,因此存貸比不宜過高也不宜過低。銀行存貸比多少合適?依據國家相關規定,商業銀行存貸比不得超過75%。對資本充足率、撥備覆蓋率良好的中小銀行,允許有條件適當突破存貸比。存貸比和貸存比一樣嗎?...
住房公積金結息是什么意思?住房公積金結息通俗的說就是住房公積金跟存錢一樣開始每年都會核算利息了。公積金計算利息一般分為兩個情況,一種情況是繳納的公積金在上一年的所有余額結算的部分,按照銀行方面的相關利率進行結算利息;另一種情況是住房公積金本年度的每個月繳納的全部金額,按照銀行方面的相關利率進行結算利息,到每年年底都會計算到本年度結束的所有余額當中。公積金年度結息如何計算?公積金年度結息分為兩個部分...