使用C語言怎么實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換算法?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
10年積累的網(wǎng)站制作、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有漢陰免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。1.1、二進(jìn)制轉(zhuǎn)十進(jìn)制
轉(zhuǎn)換規(guī)程: 從最低位開始,將每個(gè)位上的數(shù)提取出來,乘以2的(位數(shù)-1)次方,然后求和,例如:
二進(jìn)制 1011 = 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 = 1 + 2 + 0 + 8 = 11
1.2、八制轉(zhuǎn)十進(jìn)制
轉(zhuǎn)換規(guī)則: 從最低位開始,將每個(gè)位上的數(shù)提取出來,乘以8的(位數(shù)-1)次方,然后求和,例如:
八進(jìn)制 0123 = 3*8^0 + 2*8^1 + 1*8^2 = 3+16+64 = 83
1.3、十六進(jìn)制轉(zhuǎn)十進(jìn)制
轉(zhuǎn)換規(guī)則: 從最低位開始,將每個(gè)位上的數(shù)提取出來,乘以16的(位數(shù)-1)次方,然后求和,例如:
十六進(jìn)制 0x34A = 10*16^0 + 4*16^1 + 3*16^2 = 10+64+768 = 842
2.1、十進(jìn)制轉(zhuǎn)二進(jìn)制binary
規(guī)則: 將該數(shù)不斷除以2,直到商為0為止,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的二進(jìn)制,故此法叫做除商逆序取余法;
案例: 將56轉(zhuǎn)換為二進(jìn)制
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轉(zhuǎn)換為二進(jìn)制的結(jié)果是:111000
代碼實(shí)現(xiàn):
#include <stdio.h> //轉(zhuǎn)十進(jìn)制二進(jìn)制 void main() { printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):"); int binary = 0; //二進(jìn)制數(shù) int b = 1; //循環(huán)標(biāo)志 int num[100] ; //用來存二進(jìn)制的數(shù)組 int index = 0; //數(shù)組的下標(biāo) int count = -1; //用來計(jì)算數(shù)組的使用個(gè)數(shù),這里使用-1是因?yàn)閿?shù)組的下標(biāo)是從0開始的 //所以當(dāng)我們循環(huán)一次去自增的時(shí)候,第一次應(yīng)該是從0開始,如果count的初始值是0的話 //就會(huì)導(dǎo)致使用的第一個(gè)數(shù)組的下標(biāo)為1,那樣會(huì)導(dǎo)致存數(shù)據(jù)的下標(biāo)index和記錄使用的下標(biāo)count不一致 //使數(shù)據(jù)溢出 scanf("%d",&binary); while (b) { num[index] = binary % 2; //每次運(yùn)算取余 binary /= 2; //每次運(yùn)算二進(jìn)制數(shù)需要除以2 //printf("num[%d]=%d\n",index,num[index]); index++; //每循環(huán)一次數(shù)組下標(biāo)就移一位 count++; //每循環(huán)一次就表示占用了數(shù)組的一個(gè)位置 if (binary == 0) { b = 0; } } printf("占用數(shù)組位置%d個(gè)",count+1); printf("\n"); printf("二進(jìn)制數(shù)為:"); for (int i = count; i >=0; i--) { printf("%d",num[i]); } getchar(); getchar();//回車會(huì)被接收,所以需要兩個(gè)來暫停控制臺(tái) }
2.2、十進(jìn)制轉(zhuǎn)八進(jìn)制octonary
規(guī)則: 將該數(shù)不斷除以8,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的八進(jìn)制。
**案例:**將156轉(zhuǎn)換為八進(jìn)制
156:
156 / 8 = 19 余 4
19 / 8 = 2 余 3
2 / 8 = 0 余 2
故156轉(zhuǎn)換為八進(jìn)制的結(jié)果是:0234
代碼實(shí)現(xiàn):
#include <stdio.h> //十進(jìn)制轉(zhuǎn)八進(jìn)制 #define TRUE 1 //宏定義 true為1 #define FALSE 0//宏定義 false為0 void main() { int num[100]; //定義數(shù)組用來存儲(chǔ)轉(zhuǎn)換后的八進(jìn)制數(shù) int octonary = 0; //十進(jìn)制數(shù) int b = TRUE; //循環(huán)賦值的標(biāo)志 int index = 0; //存儲(chǔ)八進(jìn)制位數(shù)的下標(biāo) int count = -1; //八進(jìn)制數(shù)的位數(shù) printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):"); scanf("%d",&octonary); while (b) { num[index++] = octonary % 8; //獲取余數(shù) octonary /= 8; //累除 count++; if (octonary == 0) { //當(dāng)octonary為0時(shí),表示已經(jīng)除完了,除到底了,這時(shí)候只需要將所得到的的余數(shù) b = FALSE; //倒過來就是需要求的八進(jìn)制數(shù)了 } } printf("占用數(shù)組位置%d個(gè)\n",count+1); printf("八進(jìn)制數(shù)為:"); for (int i = count; i >= 0; i--) { printf("%d",num[i]); } getchar(); getchar(); }
2.3、十進(jìn)制轉(zhuǎn)十六進(jìn)制HEX(hexadecimal)
規(guī)則: 將該數(shù)不斷除以16,直到商為0,然后將每步得到的余數(shù)倒過來,就是對(duì)應(yīng)的十六進(jìn)制。
案例: 將356轉(zhuǎn)換成十六進(jìn)制
356:
356 / 16 = 22 余 4
22 / 16 = 1 余 6
1 / 16 = 0 余 1
故356轉(zhuǎn)換為十六進(jìn)制的結(jié)果為0x164
代碼實(shí)現(xiàn):
#include <stdio.h> #include <stdbool.h> //十進(jìn)制轉(zhuǎn)換為十六進(jìn)制 void main() { int hexadecimal = 0; printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):"); scanf("%d",&hexadecimal); bool b = true; int index = 0;//數(shù)組的下標(biāo) int num[100];//用來存儲(chǔ)轉(zhuǎn)換后十六進(jìn)制 while (b) { num[index++] = hexadecimal % 16; hexadecimal /= 16; if (hexadecimal == 0) { b = false; } } printf("占用數(shù)組的位置%d個(gè)\n",index); printf("轉(zhuǎn)換后的十六進(jìn)制數(shù)為:"); for (int i = index-1; i >= 0; i--) { printf("%d",num[i]); } getchar(); getchar(); }
3.1、二進(jìn)制轉(zhuǎn)八進(jìn)制
規(guī)則: 從低位開始,將二進(jìn)制數(shù)每三位一組(111表示7)分組,不夠的用0補(bǔ)充,將每一組轉(zhuǎn)換成對(duì)應(yīng)的八進(jìn)制即可
案例: 將11010101轉(zhuǎn)成八進(jìn)制
11010101:對(duì)其進(jìn)行三位一體分組
第一組:101 ——> 5
第二組:010 ——> 2
第三組:011 ——> 3
故,二進(jìn)制11010101對(duì)應(yīng)的八進(jìn)制數(shù)是:0325
3.2、二進(jìn)制轉(zhuǎn)十六進(jìn)制
規(guī)則: 從低位開始,將二進(jìn)制數(shù)每四位一組(1111表示F)進(jìn)行分組,轉(zhuǎn)成對(duì)應(yīng)的十六進(jìn)制數(shù)即可
案例: 將11010101轉(zhuǎn)成十六進(jìn)制
11010101:對(duì)其進(jìn)行四位一體分組
第一組:0101 ——> 5
第二組:1101 ——> 13
故,二進(jìn)制11010101轉(zhuǎn)換為十六進(jìn)制數(shù)是:0xD5
4.1、八進(jìn)制轉(zhuǎn)二進(jìn)制
規(guī)則: 將八進(jìn)制數(shù)的每一位,轉(zhuǎn)換成對(duì)應(yīng)的一個(gè)三位的二進(jìn)制數(shù)即可
案例: 將0237轉(zhuǎn)成二進(jìn)制
0237:每一位對(duì)應(yīng)三位二進(jìn)制數(shù)進(jìn)行拆分
第一組 7 ——> 111
第二組 3 ——> 011
第三組 2 ——> 010
故,八進(jìn)制數(shù)0237轉(zhuǎn)換為二進(jìn)制為:10011111
4.2、十六進(jìn)制轉(zhuǎn)二進(jìn)制
規(guī)則: 將十六進(jìn)制數(shù)的每一位,轉(zhuǎn)換成對(duì)應(yīng)的一個(gè)四位的二進(jìn)制數(shù)即可
案例: 將0X23B轉(zhuǎn)換成二進(jìn)制數(shù)
0x23B:每一位對(duì)應(yīng)四位二進(jìn)制數(shù)進(jìn)行拆分
第一組 B ——> 1011
第二組 3 ——> 0011
第三組 2 ——> 0010
故,0x23B轉(zhuǎn)換為二進(jìn)制數(shù)為:1000111011
看完上述內(nèi)容,你們掌握使用C語言怎么實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換算法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當(dāng)前名稱:使用C語言怎么實(shí)現(xiàn)一個(gè)進(jìn)制轉(zhuǎn)換算法-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://aaarwkj.com/article44/dgohhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容