进制之间相互转换

进制的的基本概念

二进制八进制十进制十六进制
系数0,10,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
基数281016
位权2的N次方8的N次方10的N次方16的N次方
字母表示BODH

其他进制转10进制

方法:按权展开

(1)2进制转10进制:

10011B=1*2 四次方+  0*2 三次方+  0*2 二次方+ 1*2 一次方+  1*2零次方 =16+2+1=19D

其他进制同上 

十进制转其他进制

方法:除基倒去取余

 

87D=  127O

二进制转八进制

方法三合一:421

1011011B=        001   011  011=133O

                          421   421  421

                              1    2+1       2+1

八进制转二进制

方法一分三

46O=100110B

二进制转十六进制

方法:四合一

1001001B=  0100     1001 =49H

                    8421      8421

                      4           8+1 

好的,以下是一个实现任意进制之间互相转换的例子: ```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、付费专栏及课程。

余额充值