进制间的转换
十进制转二进制,即整数部分除二取余,小数部分乘二取整
十进制转八进制,即整数部分除八取余,小数部分乘八取整
十进制转十六进制,即整数部分除十六取余,小数部分乘十六取整
1. 十进制转二进制
#include<stdio.h>
#include<math.h>
#define N 200 // 宏定义,定义个数
int main()
{
double number;
printf("十进制:");
scanf_s("%lf", &number); // 输入十进制数值
int DEC = (int)number; // 十进制整数部分
double xDEC = number - DEC; // 十进制小数部分
int length = 0; // 定义二进制整数长度
int length1 = 0; // 定义二进制小数长度
int Din[N]; // 定义存放二进制整数的数组
int xDin[N]; // 定义存放二进制小数的数组
double Din_sum = 0; // 定义二进制整数数值
double xDin_sum = 0; // 定义二进制小数数值
double sum;
double temp = 0; // 定义中间变量
while (DEC) // 整数计算,循环除2,把余数存储在数组中
{
Din[length] = DEC % 2;
length++;
DEC = DEC / 2;
}
while (xDEC) // 小数计算,进行乘二取整计算
{
temp = xDEC * 2;
xDin[length1] = (int)temp;
length1++;
xDEC = temp - (int)temp; // 得出其小数值
}
printf("二进制:");
if ((int)number != 0 && xDEC == 0) // 二进制整数部分计算
{
for (int i = length - 1; i >= 0; i--) // 二进制整数部分将余数从下往上输出
{
printf("%d", Din[i]);
}
}
else if ((int)number == 0 && (number - (int)number) != 0) // 二进制小数部分计算
{
for (int i = 0; i < length1; i++) //二进制整数部分将整数从上往下输出
{
printf("%d", xDin[i]);
}
}
else // 十进制带小数计算 (另一种方法即添加 . ,并非转换为数值相加 . 即, printf("%d",Din[i]);printf(".");printf("%d",xDin[i]);进行拼接
{
for (int i = length - 1; i >= 0; i--) //二进制整数部分将余数从下往上输出
{
Din_sum = Din_sum + Din[i] * pow(10, i);
}
for (int i = 0; i < length1; i++) //二进制整数部分将整数从上往下输出
{
xDin_sum = xDin_sum + xDin[i] * pow(10, -(i + 1));
}
sum = Din_sum + xDin_sum;
printf("%lf", sum);
}
return 0;
}
2. 十进制转八进制
#include<stdio.h>
#include<math.h>
#define N 200 // 宏定义,定义个数
int main()
{
double number;
printf("十进制:");
scanf_s("%lf", &number); // 输入十进制数值
int DEC = (int)number; // 十进制整数部分
double xDEC = number - DEC; // 十进制小数部分
int length = 0; // 定义八进制整数长度
int length1 = 0; // 定义八进制小数长度
int Oct[N]; // 定义存放八进制整数的数组
int xOct[N]; // 定义存放八进制整数的数组
double Oct_sum = 0; // 定义八进制整数数值
double xOct_sum = 0; // 定义八进制小数数值
double sum;
double temp = 0; // 定义中间变量
while (DEC) // 整数计算,循环除8,把余数存储在数组中
{
Oct[length] = DEC % 8;
length++;
DEC = DEC / 8;
}
while (xDEC) // 小数计算,进行乘8取整计算
{
temp = xDEC * 8;
xOct[length1] = (int)temp;
length1++;
xDEC = temp - (int)temp; // 得出其小数值
}
printf("二进制:");
if ((int)number != 0 && xDEC == 0) // 八进制整数部分计算
{
for (int i = length - 1; i >= 0; i--) // 八进制整数部分将余数从下往上输出
{
printf("%d", Oct[i]);
}
}
else if ((int)number == 0 && (number - (int)number) != 0) // 八进制小数部分计算
{
for (int i = 0; i < length1; i++) // 八进制整数部分将整数从上往下输出
{
printf("%d", xOct[i]);
}
}
else // 十进制带小数计算 (另一种方法即添加 . ,并非转换为数值相加 . 即, printf("%d",Oct[i]);printf(".");printf("%d",xOct[i]);进行拼接
{
for (int i = length - 1; i >= 0; i--) //八进制整数部分将余数从下往上输出
{
Oct_sum = Oct_sum + Oct[i] * pow(10, i);
}
for (int i = 0; i < length1; i++) //八进制整数部分将整数从上往下输出
{
xOct_sum = xOct_sum + xOct[i] * pow(10, -(i + 1));
}
sum = Oct_sum + xOct_sum;
printf("%lf", sum);
}
return 0;
}
3. 十进制转十六进制
#include<stdio.h>
#include<string>
#define N 20000
int main()
{
double number; // 定义输入
printf("十进制:");
scanf_s("%lf", &number);
int DEC = number; // 得出十进制整数部分
double xDEC = number - DEC;
int temp; // 十进制整数部分中间变量
int temp1; // 十进制小数部分中间变量
int length = 0; // 十进制整数部分长度
int length1 = 0; // 十进制小数部分长度
char Hex[N] = { 0 }; // 定义十六进制整数部分数组
char xHex[N] = { 0 }; // 定义十六进制小数部分数组
while (DEC) // 十进制整数部分转换为十六进制
{
temp = DEC % 16; // 除16取余,根据余数选择相应值
switch (temp)
{
case 0: Hex[length] = '0'; break;
case 1: Hex[length] = '1'; break;
case 2: Hex[length] = '2'; break;
case 3: Hex[length] = '3'; break;
case 4: Hex[length] = '4'; break;
case 5: Hex[length] = '5'; break;
case 6: Hex[length] = '6'; break;
case 7: Hex[length] = '7'; break;
case 8: Hex[length] = '8'; break;
case 9: Hex[length] = '9'; break;
case 10: Hex[length] = 'A'; break;
case 11: Hex[length] = 'B'; break;
case 12: Hex[length] = 'C'; break;
case 13: Hex[length] = 'D'; break;
case 14: Hex[length] = 'E'; break;
case 15: Hex[length] = 'F'; break;
default:
break;
}
length++; // 计算个数
DEC = DEC / 16;
}
while (xDEC) //十进制小数部分转换为十六进制
{
temp1 = xDEC * 16; // 乘16取整
switch (temp1)
{
case 0: xHex[length] = '0'; break;
case 1: xHex[length] = '1'; break;
case 2: xHex[length] = '2'; break;
case 3: xHex[length] = '3'; break;
case 4: xHex[length] = '4'; break;
case 5: xHex[length] = '5'; break;
case 6: xHex[length] = '6'; break;
case 7: xHex[length] = '7'; break;
case 8: xHex[length] = '8'; break;
case 9: xHex[length] = '9'; break;
case 10: xHex[length] = 'A'; break;
case 11: xHex[length] = 'B'; break;
case 12: xHex[length] = 'C'; break;
case 13: xHex[length] = 'D'; break;
case 14: xHex[length] = 'E'; break;
case 15: xHex[length] = 'F'; break;
default:
break;
}
length++;
xDEC = xDEC * 16 - temp1;
}
printf("十六进制:");
if ((int)number != 0 && number - (int)number == 0)
{
for (int i = length - 1; i >= 0; i--) //将余数从下往上输出
{
printf("%c", Hex[i]);
}
}
else if ((int)number == 0 && number - (int)number != 0)
{
for (int i = 0; i < length; i++) //将整数从上往下输出
{
printf("%c", xHex[i]);
}
}
else
{
for (int i = length - 1; i >= 0; i--) //将余数从下往上输出
{
printf("%c", Hex[i]);
}
printf(".");
for (int i = 0; i < length; i++) //将整数从上往下输出
{
printf("%c", xHex[i]);
}
}
return 0;
}