????????在計算機科學和編程中,進制轉換是一個非常重要的基礎知識。無論是二進制、八進制、十進制還是十六進制,它們在不同的場景中都有廣泛的應用。本文將詳細介紹常用進制之間的轉換方法,并附上C語言示例代碼,幫助大家更好地理解和掌握這一知識點。
1. 什么是進制?
????????進制(Number System)是一種表示數字的方法,常見的進制包括:
-
二進制(Binary):基數為 2,使用數字 0 和 1。
-
八進制(Octal):基數為 8,使用數字 0 到 7。
-
十進制(Decimal):基數為 10,使用數字 0 到 9。
-
十六進制(Hexadecimal):基數為 16,使用數字 0 到 9 和字母 A 到 F。
2. 進制轉換方法
2.1 二進制、八進制、十六進制轉十進制
????????將其他進制轉換為十進制的方法是通過按權展開法。公式如下:
其中:
-
d 是每一位的數字;
-
r 是基數(二進制為 2,八進制為 8,十六進制為 16);
-
nn是位數。
示例 1:二進制轉十進制
????????將二進制數 1011
轉換為十進制:
????
示例 2:十六進制轉十進制
????????將十六進制數 1A3
轉換為十進制:
2.2 十進制轉二進制、八進制、十六進制
????????將十進制轉換為其他進制的方法是除基取余法,即不斷除以目標進制基數,記錄余數,直到商為 0,最后將余數倒序排列。
?示例 3:十進制轉二進制
????????將十進制數 25
轉換為二進制:
25÷2=12 余1
12÷2=12 余0
6÷2=12 余0
3÷2=12 余1
1÷2=12 余1
????????將余數倒序排列:11001
,所以 25
的二進制表示為 11001
。
示例 4:十進制轉十六進制
????????將十進制數 300
轉換為十六進制:
300÷16=18?? 余12(C)
18÷16=1? 余2
1÷16=0?? 余1
????????將余數倒序排列:12C
,所以 300
的十六進制表示為 12C
。
2.3 二進制與八進制、十六進制的互相轉換
????????由于 和
,二進制與八進制、十六進制之間的轉換可以通過分組法快速完成。
示例 5:二進制轉八進制
????????將二進制數 101110
轉換為八進制:
-
從右向左每 3 位分組:
101
110
; -
將每組轉換為十進制:
101
=;
110
=;
-
組合結果:
56
。
示例 6:十六進制轉二進制
將十六進制數 3F
轉換為二進制:
-
將每位十六進制數轉換為 4 位二進制:
-
3
=0011
; -
F
=1111
;
-
-
組合結果:
00111111
。
3. 編程實現進制轉換(C語言)
以下是使用C語言實現進制轉換的示例代碼:
3.1 十進制轉二進制、八進制、十六進制
#include <stdio.h>void decimalToBinary(int num) {if (num > 1) {decimalToBinary(num / 2);}printf("%d", num % 2);
}void decimalToOctal(int num) {if (num > 7) {decimalToOctal(num / 8);}printf("%d", num % 8);
}void decimalToHexadecimal(int num) {if (num > 15) {decimalToHexadecimal(num / 16);}int remainder = num % 16;if (remainder < 10) {printf("%d", remainder);} else {printf("%c", 'A' + (remainder - 10));}
}int main() {int num = 255;printf("十進制數 %d 的二進制表示為: ", num);decimalToBinary(num);printf("\n");printf("十進制數 %d 的八進制表示為: ", num);decimalToOctal(num);printf("\n");printf("十進制數 %d 的十六進制表示為: ", num);decimalToHexadecimal(num);printf("\n");return 0;
}
3.2 其他進制轉十進制
#include <stdio.h>
#include <string.h>
#include <math.h>int binaryToDecimal(char *binary) {int decimal = 0, length = strlen(binary);for (int i = 0; i < length; i++) {if (binary[i] == '1') {decimal += pow(2, length - i - 1);}}return decimal;
}int octalToDecimal(char *octal) {int decimal = 0, length = strlen(octal);for (int i = 0; i < length; i++) {decimal += (octal[i] - '0') * pow(8, length - i - 1);}return decimal;
}int hexadecimalToDecimal(char *hex) {int decimal = 0, length = strlen(hex);for (int i = 0; i < length; i++) {if (hex[i] >= '0' && hex[i] <= '9') {decimal += (hex[i] - '0') * pow(16, length - i - 1);} else if (hex[i] >= 'A' && hex[i] <= 'F') {decimal += (hex[i] - 'A' + 10) * pow(16, length - i - 1);}}return decimal;
}int main() {char binary[] = "1010";char octal[] = "12";char hex[] = "1A";printf("二進制數 %s 的十進制表示為: %d\n", binary, binaryToDecimal(binary));printf("八進制數 %s 的十進制表示為: %d\n", octal, octalToDecimal(octal));printf("十六進制數 %s 的十進制表示為: %d\n", hex, hexadecimalToDecimal(hex));return 0;
}
4. 總結
進制轉換是計算機科學中的基礎技能,掌握它對于理解計算機底層原理和編程非常重要。本文介紹了常用的進制轉換方法,并通過C語言示例代碼幫助大家更好地理解。