C语言各进制之间的换算,C语言中进制间的互相转换

进制转换

通过上期所了解的进制,大家应该知道,在计算机中一个数值可以用不同的进制形式来表示,但实际上,不管是哪种进制形式来表示,数值本身是不会发生变化的。因此,各种进制之间可以轻松地实现转换,下面就以前面提到的十进制、二进制、八进制、十六进制为例来讲解进制如何实现转换。

十进制与二进制之间的转换

十进制与二进制之间的转换是最常见也是必须掌握的一种进制转换方式,下列针对十进制转二进制和二进制转十进制的方式分别进行讲解。

十进制转二进制

十进制转换成二进制可以采用除 2 取余的方式。也就是说将要转换的数,先除以 2 ,得到商和余数,将商继续除以 2 ,获得商和余数,此过程一直重复直到商为 0 。最后将所有得到的余数倒序排列,即可得到转换结果。接下来就以十进制的 6 转换为二进制为例进行说明。

其演算过程如下图所示:

十进制转二进制从图

39a4895c04c5ced7f0a46d265d69e10d.png

bb262fca75223c8ea936b927d6fa0f5f.png

由上图可以看出,十进制的 6 连续三次除以 2 后,得到的余数依次是:0、1、1。将所有余数倒序排列后为 110,因此,十进制的 6

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个实现任意进制之间互相转换的例子: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 将一个任意进制转换为十进制数 int anyBaseToDecimal(char* num, int base) { int result = 0; int i = 0; int len = strlen(num); // 按权展开法 for (i = 0; i < len; i++) { int digit; if (num[i] >= '0' && num[i] <= '9') { digit = num[i] - '0'; } else if (num[i] >= 'A' && num[i] <= 'Z') { digit = num[i] - 'A' + 10; // A~Z表示的数字 } else { printf("Invalid input!\n"); // 非法输入 return 0; } result = result * base + digit; } return result; } // 将一个十进制转换为任意进制数 char* decimalToAnyBase(int num, int base) { int quotient = num; int remainder; char* result = (char*) malloc(32 * sizeof(char)); // 分配足够的内存空,最多支持32位进制数 char* buffer = (char*) malloc(32 * sizeof(char)); int i = 0; // 除基取余法 while (quotient != 0) { remainder = quotient % base; quotient = quotient / base; if (remainder < 10) { buffer[i++] = remainder + '0'; } else { buffer[i++] = remainder - 10 + 'A'; // 大于等于10时,使用A~Z表示 } } int j = 0; // 反转字符串 for (j = 0; j < i; j++) { result[j] = buffer[i-j-1]; } result[j] = '\0'; // 字符串结尾需要加上'\0' free(buffer); // 释放内存空 return result; } // 将一个任意进制转换为另一个任意进制数 char* anyBaseToAnyBase(char* num, int from, int to) { int decimal = anyBaseToDecimal(num, from); // 先将任意进制转换为十进制数 char* result = decimalToAnyBase(decimal, to); // 再将十进制转换为目标进制数 return result; } int main() { char* num = "12345"; int from = 10; // 数字是10进制 int to = 16; // 转换为16进制 char* result = anyBaseToAnyBase(num, from, to); printf("%s in base %d: %s in base %d\n", num, from, result, to); free(result); // 释放内存空 return 0; } ``` 以上代码可以将一个任意进制转换为另一个任意进制数。你可以根据自己的需要来修改进制数和测试数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值