二到十十到十六十到二十六到十//二进制转换十进制 10111B=1x24 + 0x23 +1 x22 +1 x21 +1 x20= 23 十六进制转换十进制125H=1×162+2×161+5×160=293D十进制转换二进制的方法,不停的除以2,直到商为0,将每一步得到的余数倒着串起来即可50D=50 ÷ 2 =25 //余数为025 ÷ 2 =12 //余数为112 ÷ 2 =6 //余数为06 ÷ 2 =3 //余数为03 ÷ 2 =1 //余数为11 ÷ 2 =0 //余数为1十六进制转换十进制125H=1×162+2×161+5×160=293D十进制转换十六进制293D=293 ÷ 16 = 18 //余数518 ÷ 16 = 1 //余数21 ÷ 16 =0 //余数为1125H=293D
void 二到十(char *p_二进制, char * p_十进制) { int l_十进制 = 0; int l_次方 = strlen(p_二进制) - 2; for (size_t i = 0; i < strlen(p_二进制) - 1; i++) { l_十进制 = l_十进制 + (p_二进制[i] - 48)*pow(2, l_次方); l_次方 = l_次方 - 1; }
itoa(l_十进制, p_十进制, 10);}
#include<stdio.h>
#include<stdlib.h>#include<string.h>#include<math.h>void 十到二(char *p_输入数, char *p_进制) { //50 ÷ 2 = 25 //余数为0 //25 ÷ 2 = 12 //余数为1 //12 ÷ 2 = 6 //余数为0 //6 ÷ 2 = 3 //余数为0 //3 ÷ 2 = 1 //余数为1 //1 ÷ 2 = 0 //余数为1 int l_v1 = atoi(p_输入数); int l_v2; int 结果[10] = { 0 }; int 索引=0; while (l_v1 > 0) { 结果[索引] = l_v1 % 2; l_v1 = l_v1 / 2; 索引 = 索引 + 1; } for (size_t i = 0; i <= 索引/2; i++) { l_v2 = 结果[i]; 结果[i] = 结果[索引-i]; 结果[索引 - i] = l_v2; } for (size_t i = 0; i < 索引+1; i++) { printf("%d", 结果[i]); }}void main() { char 进制数[100] = { 0 }; char 进制[10] = { 0 }; printf("请输入进制数"); fgets(进制数, sizeof(进制数), stdin); 进制数[strlen(进制数) - 1] = 0; printf("请输入进制"); fgets(进制, sizeof(进制), stdin); 进制[strlen(进制) - 1] = 0; if (strcmp(进制, "2") == 0) { 十到二(进制数, 进制); }
system("pause");
}