C語言的進制轉換及算法實現教程
1、其他進制轉十進制
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、十進制轉其他進制
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> //轉十進制二進制 void main() { printf("請輸入一個十進制數:"); int binary = 0; //二進制數 int b = 1; //循環標志 int num[100] ; //用來存二進制的數組 int index = 0; //數組的下標 int count = -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 (int i = 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> //十進制轉八進制 #define TRUE 1 //宏定義 true為1 #define FALSE 0//宏定義 false為0 void main() { int num[100]; //定義數組用來存儲轉換後的八進制數 int octonary = 0; //十進制數 int b = TRUE; //循環賦值的標志 int index = 0; //存儲八進制位數的下標 int count = -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 (int i = 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> //十進制轉換為十六進制 void main() { int hexadecimal = 0; printf("請輸入一個十進制數:"); scanf("%d",&hexadecimal); bool b = true; int index = 0;//數組的下標 int num[100];//用來存儲轉換後十六進制 while (b) { num[index++] = hexadecimal % 16; hexadecimal /= 16; if (hexadecimal == 0) { b = false; } } printf("占用數組的位置%d個\n",index); printf("轉換後的十六進制數為:"); for (int i = index-1; i >= 0; i--) { printf("%d",num[i]); } getchar(); getchar(); }
3、二進制轉其他進制
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、其他進制轉二進制
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語言進制轉換及算法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!