二进制转化为十进制
#include<stdio.h>
int main()//将二进制转化成十进制
{
//整数部分
double sum = 0; char ch;
while ((ch = getchar()) != '\n')
{
if (ch == '.')
break;
sum = sum * 2 + ch - '0';
}
//小数部分
double weight = 1; //weight是小数后的权重
double tmp = 1;
if (ch == '.')
{
{
while ((ch = getchar()) != '\n')
{
weight = weight * (tmp / 2);
sum = sum + (ch - '0') * weight;
}
}
printf("%lf\n", sum);
}
else//如果没有小数的话
printf("%d", (int)sum); //将double类型的sum强制转化为int型
return 0;
}
字符-‘0’ 就代表字符转化为一个数子,如 ‘8’ - ‘0’==8;
十进制转化为二进制
#include<stdio.h>
int main()//将带小数点的十进制转化为二进制
{
//整数部分
double sum = 0; int i = 0;
printf("请输入一个带小数点的十进制数字:");
scanf_s("%lf", &sum); double ret = sum;
int arr[18] = { 0 };
for (i = 0; i < 18; i++)
{
arr[i] = (int)sum % 2;
sum = sum / 2;
}
while (arr[i-1]==0)//去掉前面多余的零
{
i--;
}
for (; i>0; i--)
{
printf("%d", arr[i-1]);
}
/*for (i = 17; i >= 0; i--)
{
printf("%d", arr[i]);
}*/
printf(".");
//小数部分
i = 0;
double num = 0;
int tmp = (int)ret; double j = 1;
num = ret - tmp; int arr1[18] = { 0 };
double weight = j / 2; double ret1 = 0;
do
{
if ((ret1 <= num)&&((ret1 + weight)<=num))
{
ret1 = ret1 + weight;
arr1[i] = 1;
i++;
weight = weight / 2;
if (i > 16)//控制小数点后的位数
break;
}
else if (ret1 == num)
break;
else
{
i++;
weight = weight / 2;
arr1[i] = 0;
if (i > 17)
break;
}
} while (ret1 != num);
for (i = 0; i<17; i++) //打印出结果
{
printf("%d", arr1[i]);
}
return 0;
}
把题目分成三部分,整数部分,小数点,小数部分
其中的小数部分就需要第一步把小数分离出来
其次是实现ret1与小数部分num相等
十六进制转化为二进制
#include<stdio.h>
#include<string.h>
int main()
{
char ch; int i = 0; char s[32] = "";
while ((ch = getchar()) != '\n')
{
switch (ch)//十六进制的每一种情况转化为二进制
{
case '0':
strcat(s, "0000"); break;
case'1':
strcat(s, "0001"); break;
case '2':
strcat(s, "0010"); break;
case '3':
strcat(s, "0011"); break;
case '4':
strcat(s, "0100"); break;
case '5':
strcat(s, "0101"); break;
case '6':
strcat(s, "0110"); break;
case '7':
strcat(s, "0111"); break;
case '8':
strcat(s, "1000"); break;
case '9':
strcat(s, "1001"); break;
case 'A':
strcat(s, "1010"); break;
case 'B':
strcat(s, "1011"); break;
case 'C':
strcat(s, "1100"); break;
case 'D':
strcat(s, "1101"); break;
case 'E':
strcat(s, "1110"); break;
case 'F':
strcat(s, "1111"); break;
}
}
while (s[i]=='0')//接下来的操作是将整个字符串的零去掉
{
i++;
}
for (; i < 32; i++)
{
printf("%c", s[i]);
}
return 0;
}
欢迎点赞收藏加关注,如若有问题可以题出来😁😁😁😁