掌握C语言,必知常用进制转换技巧
2025-07-29 05:36:47
6111474 阅读
在C语言编程中,进制转换是一个基础且常用的操作。掌握以下常用进制转换技巧,将有助于提高编程效率和解决问题的能力。
一、十进制转二进制
原理
十进制转二进制采用“除2取余法”,即不断地将十进制数除以2,记录下每次的余数,然后将余数倒序排列,即可得到对应的二进制数。
示例代码
#include <stdio.h>
void decToBin(int n) {
if (n == 0) {
printf("0");
return;
}
int arr[32];
int index = 0;
while (n > 0) {
arr[index++] = n % 2;
n = n / 2;
}
for (int i = index - 1; i >= 0; i--) {
printf("%d", arr[i]);
}
}
int main() {
int num;
printf("Enter a decimal number: ");
scanf("%d", &num);
printf("Binary representation: ");
decToBin(num);
return 0;
}
二、二进制转十进制
原理
二进制转十进制采用“按位权展开法”,即把二进制数的每一位乘以其对应的2的幂次方,然后将结果相加。
示例代码
#include <stdio.h>
int binToDec(char binary[]) {
int len = strlen(binary);
int base = 1;
int dec_value = 0;
for (int i = len - 1; i >= 0; i--) {
if (binary[i] == '1')
dec_value += base;
base = base * 2;
}
return dec_value;
}
int main() {
char binary[32];
printf("Enter a binary number: ");
scanf("%s", binary);
printf("Decimal representation: %d", binToDec(binary));
return 0;
}
三、十进制转八进制
原理
十进制转八进制同样采用“除N取余法”,其中N为8。不断地将十进制数除以8,记录下每次的余数,然后将余数倒序排列,即可得到对应的八进制数。
示例代码
#include <stdio.h>
void decToOct(int n) {
if (n == 0) {
printf("0");
return;
}
int arr[32];
int index = 0;
while (n > 0) {
arr[index++] = n % 8;
n = n / 8;
}
for (int i = index - 1; i >= 0; i--) {
printf("%d", arr[i]);
}
}
int main() {
int num;
printf("Enter a decimal number: ");
scanf("%d", &num);
printf("Octal representation: ");
decToOct(num);
return 0;
}
四、八进制转十进制
原理
八进制转十进制同样采用“按位权展开法”,即将八进制数的每一位乘以其对应的8的幂次方,然后将结果相加。
示例代码
#include <stdio.h>
int octToDec(char octal[]) {
int len = strlen(octal);
int base = 1;
int dec_value = 0;
for (int i = len - 1; i >= 0; i--) {
if (octal[i] >= '0' && octal[i] <= '7')
dec_value += (octal[i] - '0') * base;
base = base * 8;
}
return dec_value;
}
int main() {
char octal[32];
printf("Enter an octal number: ");
scanf("%s", octal);
printf("Decimal representation: %d", octToDec(octal));
return 0;
}
五、十进制转十六进制
原理
十进制转十六进制同样采用“除N取余法”,其中N为16。不断地将十进制数除以16,记录下每次的余数,然后将余数倒序排列。如果余数大于9,则用A、B、C、D、E、F表示。
示例代码
#include <stdio.h>
void decToHex(int n) {
if (n == 0) {
printf("0");
return;
}
int arr[32];
int index = 0;
while (n > 0) {
int remainder = n % 16;
if (remainder < 10)
arr[index++] = remainder;
else
arr[index++] = remainder - 10 + 'A';
n = n / 16;
}
for (int i = index - 1; i >= 0; i--) {
printf("%c", arr[i]);
}
}
int main() {
int num;
printf("Enter a decimal number: ");
scanf("%d", &num);
printf("Hexadecimal representation: ");
decToHex(num);
return 0;
}
六、十六进制转十进制
原理
十六进制转十进制同样采用“按位权展开法”,即将十六进制数的每一位乘以其对应的16的幂次方,然后将结果相加。
示例代码
#include <stdio.h>
int hexToDec(char hex[]) {
int len = strlen(hex);
int base = 1;
int dec_value = 0;
for (int i = len - 1; i >= 0; i--) {
if (hex[i] >= '0' && hex[i] <= '9')
dec_value += (hex[i] - '0') * base;
else if (hex[i] >= 'A' && hex[i] <= 'F')
dec_value += (hex[i] - 'A' + 10) * base;
base = base * 16;
}
return dec_value;
}
int main() {
char hex[32];
printf("Enter a hexadecimal number: ");
scanf("%s", hex);
printf("Decimal representation: %d", hexToDec(hex));
return 0;
}
总结
掌握以上常用进制转换技巧,将有助于你在C语言编程中更好地处理进制转换问题。在实际编程过程中,可以根据需要选择合适的转换方法,以提高编程效率。
标签: