C语言· 实现各进制间的相互转换

数制只是人用来计数的不同方法,但他们所表示的量不会改变。下面我们试着用C语言来实现数制之间的转换。

一.由十进制转换为其他进制

我们常用的更为熟悉的是十进制,那我们就用十进制开始。(下面用二进制举例)
如下图原理:除基取余,反向输出
原理图
所以我们要做的是

1.记录余数。
2.将商转换为下一个被除数。
3.循环继续——递归
4.待商为零时停止循环(但同样记录余数)。
5.反向输出所记录的余数。

在处理倒序时,递归比循环更为简单。

根据如上思路写出一下通解过程:

void zhuanhuan(int i, int d) {
    
    
    int yushu = i % d;
    i = i / d;
    if (i != 0) {
    
    
        zhuanhuan(i, d);
    }
    printf("%d", yushu);
    return;
}

(用一张图描述一下递归过程)
递归过程描述

二,其他进制转换为十进制

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
解决了十进制对其他进制的转换,那其他的转换为十进制就简单的多。

如,二进制转换为十进制:

#include <stdio.h>
#include<string.h>
int main()
{
    
    
	char two[] = "11010";
	int ten=0;
	int j = 1;
	int len = strlen(two);
	for (int i = 0;i < len;i++) {
    
    
		int a = two[len-1-i] - '0';
		ten = ten + a * j;
		j = j * 2;
	}
	printf("%d", ten);
	}
	

输出结果:
结果
十六进制转换为十进制:

#include <stdio.h>
#include<string.h>
int main()
{
    
    
	char S[] = "0123456789ABCDEF";
	char sixteen[] = "9FA8C";
	int ten=0;
	int j = 1;
	int len = strlen(sixteen);
	for (int i = 0;i < len;i++) {
    
    
		int a;
		if (sixteen[len - 1 - i] >= '0' && sixteen[len - 1 - i] <= '9') {
    
    
			 a = sixteen[len - 1 - i] - '0';
		}
		else {
    
    
			for (int j = 0;j < 16;j++) {
    
    
				if (sixteen[len - 1 - i] == S[j]) {
    
    
					 a = j;

				}
			}
		}
		ten = ten + a * j;
		j = j * 16;
	}
	
	printf("%d", ten);
	}

输出结果:
结果

三,各进制相互转换

当我们已经学会十进制与其他进制之间的转换,就可以将十进制做为中间过渡。如将二进制转换为十六进制,我们也就可以先将二进制转换为十进制,再见十进制转换为十六进制。

四,利用itoa()函数进行各数制转换

#include <stdio.h>
#include<stdlib.h>
int main()
{
    
    
    int number1 = 123456;
    int number2 = -123456;
    char string[16] = {
    
     0 };
    itoa(number1, string, 10);
    printf("数字:%d 转换后的字符串为:%s\n", number1, string);
    itoa(number1, string, 8);
    printf("数字:%d 转换后的字符串为:%s\n", number1, string);
    itoa(number2, string, 10);
    printf("数字:%d 转换后的字符串为:%s\n", number2, string);
    itoa(number2, string, 16);
    printf("数字:%d 转换后的字符串为:%s\n", number2, string);
    return 0;
}

结果

猜你喜欢

转载自blog.csdn.net/weixin_52340203/article/details/114649867